簡體   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