java - List.set 替换 TreeMap 中的所有索引

标签 java dictionary treemap

我有一个 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/

相关文章:

java - 为什么包含值返回 false?

java - 在 arraylist 中存储绝对文件路径或文件对象的优化方法是什么?

java - 尽管使用 OSIV,Spring 事务划分仍会导致新的 Hibernate session

dictionary - 当键不在 map 中时不引发错误(如 Python)有什么好处?

java - .class 预期和非法表达式

arrays - 如何按字典 Swift 中包含的数组值对字典进行排序

android - map 标记 fragment 按钮不起作用

apache-flex - 如何创建 Treemap 并通过 flex 对其进行描绘?

java - 将 String 的 ReplaceAll 与正则表达式一起使用

java - 呈现模板gsp时通过model属性检索传递的数据时缺少MissingMethodException