我有一个 TreeMap<String, List<Double>
我想在某个键处拉出列表,在某个索引处添加一个值,然后将其放回 TreeMap。
在执行以下代码时,TreeMap 包含:
{specificKey=[0,0,0], specificKey2=[0,0,0], specificKey3=[0,0,0]}
我想将值添加到索引 0 处的 specificKey,所以 {specificKey=[777,0,0], specificKey2=[0,0,0], specificKey3=[0,0,0]}
这是有问题的代码...
if (myMap.containsKey(specificKey){
List<Double> doubleList = myMap.get(specificKey);
doubleList.set(0, someValue);
myMap.put(specificKey, doubleList);
}
相反,发生的是:{specificKey=[777,0,0], specificKey2=[777,0,0], specificKey3=[777,0,0]}
当我使用 myMap.get(specificKey) 提取确切列表时,为什么会发生这种情况?以及关于如何完成我需要的任何想法?
最佳答案
你做的一切都是对的。此外,您可以删除 myMap.put(specificKey, doubleList)
,因为列表已经存在。
在您的场景中发生这种情况的原因是所有三个键都指向 List<Double>
的同一个实例。您在填充 TreeMap
时创建的.更改代码为每个键插入新列表以解决此问题:
myMap.put(specificKey1, new ArrayList<Double>(Collections.nCopies(3, Double.valueOf(0))));
myMap.put(specificKey2, new ArrayList<Double>(Collections.nCopies(3, Double.valueOf(0))));
myMap.put(specificKey3, new ArrayList<Double>(Collections.nCopies(3, Double.valueOf(0))));
...
if (myMap.containsKey(specificKey1){
myMap.get(specificKey1).set(0, someValue);
}
关于java - List.set 替换 TreeMap 中的所有索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47657857/