2015-05-27 66 views
0

我遇到了一些奇怪的東西,我無法得到正在發生的事情。我創建一個HashMap,然後在循環中添加一些鍵值對。在循環內,我在每次迭代中更改一個預初始化的數組。因此,我希望永遠是不同的陣列作爲map.Here的代碼值:迭代HashMap奇怪的行爲

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] 
+1

你爲什麼期望不同的值?你在這裏操作了多少個int []對象? –

回答

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))); 
}