Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中是否有表示列表映射的公共数据结构_Java_Data Structures - Fatal编程技术网

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的链接。编写代码所花的时间不算什么,问题是我花时间来找出是否有库,或者在这里问这个问题,现在,这是一个理由,有一个放在首位:)