LinkedList of Arrays .. Все элементы получают значение последнего элемента - PullRequest
2 голосов
/ 27 марта 2020

Я пытаюсь заполнить LinkedList массивов, используя For l oop, но результат странный: все элементы вне моего 'for' l oop получают значение последнего элемента! Однако, когда я делаю то же самое с LinkeList из Integer, на этот раз все работает, все элементы получают его «реальную ценность». Итак, мой вопрос: почему он работает с LinkedList из Integer, но не работает с массивами ??

    public static void main(String[] args) {
        LinkedList<Integer[]> listOfArrays = new LinkedList<Integer[]>();
        LinkedList<Integer> listOfInt = new LinkedList<Integer>();
        Integer[] array = new Integer[2];

            for(int i = 0; i <= 2; i++) {
                array[0] = i;
                array[1] = i+1;
                listOfArrays.add(array);
                listOfInt.add(i);
                System.out.println("Result 1 verifying current array: " + Arrays.toString(array));
                System.out.println("Result 2 verifying last added member of my list of arrays: " + Arrays.toString(listOfArrays.getLast()) + "\n");
                }

            System.out.println("\nResult 3 verifying the same fucking list outside 'for' loop");
        for (int k = 0; k<listOfArrays.size(); k++) 
            System.out.println("element number " + k + ": " + Arrays.toString(listOfArrays.get(k)));

            System.out.println("\nResult 4 verifying integer list outside 'for' loop");
        for (int k = 0; k<listOfInt.size(); k++) 
            System.out.println("element number " + k + ": " + (listOfInt.get(k).toString()));
}

1 Ответ

3 голосов
/ 27 марта 2020

Вы восстанавливаете один и тот же массив и перезаписываете его элементы в каждой итерации l oop. Следовательно, все элементы списка на самом деле являются одним и тем же массивом, и, таким образом, все они имеют данные, независимо от того, какой элемент вы просматриваете. Вместо этого вы должны создавать новый массив в каждой итерации:

for (int i = 0; i <= 2; i++) {
    Integer[] array = new Integer[2];

    array[0] = i;
    array[1] = i+1;
    listOfArrays.add(array);
    listOfInt.add(i);
}
...