我创建了一个 TreeMap> 并为所有键设置了数组列表值(0,0)。然后我只更新了单个键值。但它最终会更新所有键值。这是我的简化代码
import java.util.*;
public class Test {
public static void main(String[] args) {
TreeMap<String, ArrayList<Integer>> treeMap = new TreeMap<>();
String[] moduleList = {"apple", "orange", "grape"};
ArrayList<Integer> emptyInitialArrayList = new ArrayList<>(Arrays.asList(0, 0));
for (String tempModule : moduleList) {
treeMap.put(tempModule, emptyInitialArrayList);
}
ArrayList<Integer> tempModuleMap = treeMap.get("apple");
tempModuleMap.set(0, tempModuleMap.get(0) + 1);
for (Map.Entry<String, ArrayList<Integer>> test : treeMap.entrySet()) {
System.out.println(test.getKey());
System.out.println(test.getValue().get(0));
System.out.println(test.getValue().get(1));
}
}
}
此代码的输出:
apple
1
0
grape
1
0
orange
1
0
我错过了一些东西。找不到我哪里出错了。
最佳答案
要修复此问题,只需将新的 ArrayList 调用放入循环中即可。否则,您将在所有键之间共享相同的值对象
String[] moduleList = {"apple", "orange", "grape"};
for (String tempModule : moduleList) {
ArrayList<Integer> emptyInitialArrayList = new ArrayList<>(Arrays.asList(0, 0));
treeMap.put(tempModule, emptyInitialArrayList);
}
关于java - 更新 TreeMap<String,ArrayList<Integer>> 中的单个键会更改所有键值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53193958/