ArrayLists, установка значения для одного ArrayList изменяет значение для другого - PullRequest
0 голосов
/ 17 октября 2011

Как видно из названия, у меня есть два ArrayList.Как ни странно, установка значения для одного массива изменяет его для другого.

Некоторая информация: это ArrayLists типа Entry, каждый из которых содержит количество и значение (что вы видите в скобках).Я пытаюсь превратить этот массив: [(5,2) (2,5) (3,2)]

в эти [(1,2)] и [(4,2) (2, 5) (3,2)].я == 1 в этом случае, а остальные Амт == 1.

ArrayList<Entry> firstHalf = new ArrayList<Entry>();
    ArrayList<Entry> secondHalf = new ArrayList<Entry>();

    for(int j = 0; j<=i;j++){
        firstHalf.add(rleAL.get(j));
    }
    for(int k = i; k<rleAL.size(); k++){
        secondHalf.add(rleAL.get(k));
    }
    System.out.println(firstHalf);//gives (5,2)
    firstHalf.get(i).setAmount(remainingAmt);
    System.out.println(firstHalf);//gives (1,2) *CORRECT*
    secondHalf.get(0).setAmount(rleAL.get(i).getAmount() - remainingAmt);
    System.out.println(firstHalf);//gives (0,2) *WRONG*

Ответы [ 2 ]

7 голосов
/ 17 октября 2011

Ничего необычного там нет - если базовые объекты распределяются между списками, изменение одного объекта будет отражаться в другом. Если вам нужно, чтобы списки были независимыми, вам нужно использовать разные объекты в каждом списке, создавая новые объекты с нуля или копируя исходный объект в новый объект в списке № 2.

0 голосов
/ 17 октября 2011

Единственная проблема здесь в вашем названии.Вы вообще не «устанавливали значение для одного ArrayList».Вы установили значение в объекте , который является членом обоих списков массивов, поэтому, конечно, он отображается в обоих.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...