我遇到一些奇怪的东西,我无法得到正在发生的事情。我正在创建一个HashMap,然后在一个循环上添加一些键值对。在循环中我在每次迭代时改变一个预先初始化的数组。所以我期望总是将不同的数组作为map中的值。这是代码:
int[] valueArray = new int[3];
int key = 0;
Map<Integer, int[]> map = new HashMap<>();
while (key < 5) {
for (int i = 0; i < 3; i++) {
valueArray[i] = key;
}
System.out.println(Arrays.toString(valueArray));
map.put(key, valueArray);
key++;
}
for (int i = 0; i < map.size(); i++) {
System.out.println("Key: " + i + " Value: " + Arrays.toString(map.get(i)));
}
这是输出:
[0, 0, 0]
[1, 1, 1]
[2, 2, 2]
[3, 3, 3]
[4, 4, 4]
Key: 0 Value: [4, 4, 4]
Key: 1 Value: [4, 4, 4]
Key: 2 Value: [4, 4, 4]
Key: 3 Value: [4, 4, 4]
Key: 4 Value: [4, 4, 4]
答案 0 :(得分:0)
您每次都使用相同的数组引用。使其工作在每次迭代时创建一个新的引用。像这样:
int key = 0;
Map<Integer, int[]> map = new HashMap<>();
while (key < 5) {
int[] valueArray = new int[3];
for (int i = 0; i < 3; i++) {
valueArray[i] = key;
}
System.out.println(Arrays.toString(valueArray));
map.put(key, valueArray);
key++;
}
for (int i = 0; i < map.size(); i++) {
System.out.println("Key: " + i + " Value: " + Arrays.toString(map.get(i)));
}