2017-02-09 35 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