2015-05-27 5 views
0

Я встречаюсь с чем-то странным для меня, и я не могу понять, что происходит. Я создаю HashMap, а затем добавляю несколько пар ключ-значение по циклу. Внутри цикла я изменяю предварительно инициализированный массив на каждой итерации. Так что я ожидаю всегда разные массивы в качестве значений в map.Here по коду:Iterating 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))); 
} 
Смежные вопросы