Java中是否有表示列表映射的公共数据结构
我正在寻找一种通用的数据结构,它具有Java中是否有表示列表映射的公共数据结构,java,data-structures,Java,Data Structures,我正在寻找一种通用的数据结构,它具有Map 现在我做的是 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
Map
现在我做的是
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);
}
...
}
公共类映射列表{
私有映射映射=新的HashMap();
公共无效附加项(K键,V值){
如果(!map.containsKey(键)){
put(key,newarraylist());
}
List=map.get(键);
列表。添加(值);
}
...
}
难道没有更通用的解决方案吗?我是在重新发明轮子(或者一个不那么重要的人工制品)就像一个……或者
就我个人而言,我认为你的方法没有错。您正在权衡编写和维护所需的时间(没有那么长),而不是依赖于像谷歌这样的第三方库。你的方法是有道理的。核心Java中没有任何东西可以做你想做的事情 第三方库中可能有一些,但我总是编写自己的类,因为它相对简单。我会选择谷歌。我不会使用ApacheCommons集合库,因为它不支持泛型,而Google集合库相当不错,所以我已经用它代替ApacheCommons集合有一段时间了。GoogleCollections类中的所有类,甚至ApacheCommonsLang中的所有类的一个特点是,如果您查看它的大多数方法,它们通常都很小,并且每次为您编码时可以节省一到两行代码 但从长远来看,如果代码中没有太多的条件块来检查对象是否为空,然后再进行[比较][2],或者地图中是否存在列表以进行选择(然后添加项目或创建列表并将其放入地图),那么代码将更具可读性,周围的噪音也会更小
[2] :,java.lang.Object)我倾向于使用到一个不可变的单链接列表的映射,出于历史原因,通常称它为
Cons
,其中列表以null
结尾。在这种情况下,上述代码减少为:
public void addItem(K key, V value) {
map.put ( key, new Cons<V> ( value, map.get ( key ) ) );
}
public void addItem(K键,V值){
map.put(key,newcons(value,map.get(key));
}
因为创建一个以null作为尾部的cons是有效的。因为我已经使用了apache commons,他们那边没有解决方案吗?是的,我已经添加了一个指向apache commons DefaultMapBag的链接。编写代码所花的时间不算什么,问题是我花时间来找出是否有库,或者在这里问这个问题,现在,这是一个理由,有一个放在首位:)