繁体   English   中英

是否有一个通用的数据结构,表示Java中的列表映射

[英]Is there a common Data Structure that represent a Map of Lists in Java

我正在寻找具有Map<K, List<V>>功能的通用数据结构

目前我所做的就像是

public class MapOfLists <K,V>{

     private Map<K, List<V>> map = new HashMap<K, List<V>>();

     public void addItem(K key, V value){
        if(!map.containsKey(key)){
            map.put(key, new ArrayList<V>());
        }
        List<V> list = map.get(key);
        list.add(value);
     }
     ...
}

是不是有更通用的解决方案? 我是重新发明轮子(还是一个不那么重要的神器)

Google MultiMap ....或Apache Commons DefaultMapBag

就个人而言,我认为你的做法没有错。 你正在缩短编写时间(而不是那么长),并且不要再依赖谷歌这样的第三方库。 你的方法是可辩护的。

我会使用Google Multimap 我不会使用Apache Commons Collections库,因为它不支持泛型,而且Google Collection库非常不错,所以我一直在使用而不是Apache Commons Collections。 关于Google Collections类中的所有类,甚至是Apache Commons Lang中的内容,如果你看看它的大多数方法,它们通常都很小,并且在编码时会节省一两行。您。

但是从长远来看,当你的代码中没有很多条件块来检查对象在[比较] [2]之前是否为空时,或者如果列表中存在列表以进行选择(到那时)添加一个项目或创建列表并将其放在地图中),您的代码最终会更具可读性并且噪音更小。

[2]: http//commons.apache.org/lang/api-2.4/org/apache/commons/lang/ObjectUtils.html#equals (java.lang.Object,java.lang.Object)

我倾向于使用映射到不可变的单链表,通常因为历史原因将其称为Cons ,其中列表以null 在这种情况下,上面的代码简化为:

public void addItem(K key, V value) {
    map.put ( key, new Cons<V> ( value, map.get ( key ) ) );
}

因为它的尾部有效,所以创建一个带有null的cons。

核心Java中没有任何东西可以做你正在尝试做的事情。

第三方库中可能有一些,但我总是编写自己的类,因为它相对简单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM