2017-02-09 64 views
1

比方說,我有一個LinkedHashMap<Integer,Point2D.Double>,我把一個鍵和一個值給它,就像.put(2,new Point2D.Double(34,32));如何防止LinkedHashMap替換鍵/值?

我的問題是,有時我需要把鑰匙,並在其中一個已存在的值,LinkedHashMap取代它。

贊,我已經有了鑰匙2和值Point2D.Double(34,32),我需要再添加一次。

爲什麼它通過將相同的值添加到地圖來替代該鍵/值,並且是否有解決此問題的方法(可能通過另一種地圖)?

+4

的可能的複製[HashMap的:一鍵多個值(HTTP:// stackoverflow.com/questions/8229473/hashmap-one-key-multiple-values) – khelwood

+1

似乎是一個設計問題,我沒有閱讀你的真實意圖。你想保持這兩個值嗎?還是隻有第一個值?從你的問題看,你似乎不想保留第二個而不是第一個。 – pintxo

回答

1

如果點的順序並不重要,初始化你的HashMap爲:

HashMap<Integer,HashSet<Point2D.Double>> hashmap = new HashMap<Integer,HashSet<Point2D.Double>>(); 

,而不是使用

hashmap.put(1,new Point2D.Double(34,32)); 

使用下面的代碼:

if(hashmap.get(key) == null){ 
    value = new HashSet<Point2D.Double>(); 
}else{ 
    value = hashmap.get(key); 
} 
value.add(point_to_add); 
hashmap.put(key,value); 

如果訂單的插入點是重要的,請使用(數組)列表而不是哈希集合

編輯

AS GPI提到:使用Java 8你也可以這樣來做:

map.computeIfAbsent(key, k -> new HashSet<>()).add(value) 
+0

很好的答案。更多的「java 8」方式可能是'map.computeIfAbsent(key,k - > new HashSet <>()).add(value)'variant – GPI

+0

我同意。我將編輯我的答案 – osanger

+0

感謝您的快速回復,我會試一試:D – Julien