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