[英]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.