2016-08-30 21 views
0

我的問題是,我需要一個HashMap,它在調用hashMap.get(key)時返回對內部LinkedList的引用 - 而不是簡單地返回對應於該鍵的值。Java中的哈希映射和列表對帳

從我收集的信息來看,LinkedHashMap使雙向鏈表能夠佔用每個映射條目以進行衝突處理。不過,我希望能夠獲得對封裝了映射到其中的所有值的全局LinkedList的引用(由於我的重寫哈希碼函數,共享LinkedList的每個對象也共享我非常感興趣的特定功能)。換句話說,我的目標是避免鏈接列表自動遍歷構建到LinkedHashMap類中,只是希望列表本身的引用可操作化。

我希望返回此引用,除了有能力使用linkedHashMap.put(key,value)調用將新值添加到LinkedLists的末尾之外。

任何指針,將不勝感激。

+0

「從我所收集的信息來看,LinkedHashMap使雙向鏈表能夠佔用衝突處理的每個映射條目」 - 不,鏈接列表給LinkedHashMap的名稱做了完全不同的事情。碰撞解析列表存在於普通的HashMap中。 – user2357112

+0

'地圖>''?這是否適合您的需求? 'linkedHashMap.put(key,value)'可以用簡單的獲取和更新步驟完成(但如果不同步,將不會是原子的) – Antoniossss

+3

爲什麼不使用'HashMap >'? – user2357112

回答

1

LinkedHashMap只是按照定義的順序存儲其密鑰(A LinkedList支持KeySet)。這與處理碰撞的方式無關。

對於你所描述的,我認爲你必須自己實現。你基本上正在製作一個Map<KeyType, List<EntryType>>,並附帶一個「put」函數附加到關聯列表。這不是太多的代碼。

但是,我可能不會讓它實際上延伸Map,因爲你所描述的並不真正匹配那個接口。

+0

在Java 8中,使用['Map#computeIfAbsent']更容易(https://docs.oracle.com/javase/8/docs/api/java/util/Map.html#computeIfAbsent-K-java.util (key,k - > new LinkedList <>())。add(value);' – 4castle

+0

@ 4castle哦,我不知道那是一件事。謝謝! –