Когда я добавляю все содержимое ArrayList
к другому ArrayList
, другой ArrayList
содержит ссылки на элементы первого ArrayList
.Следовательно, когда я изменяю элемент в одном из List
s, соответствующий элемент в другом List
также изменяется.Это означает, что addAll
присваивает ссылки на новый List
.
Код ссылки:
ArrayList<StringBuffer> a = new ArrayList<>();
a.add(new StringBuffer("1"));
a.add(new StringBuffer("2"));
a.add(new StringBuffer("3"));
ArrayList<StringBuffer> b = new ArrayList<>();
b.addAll(a);
System.out.println("Arralists" + " before: ");
System.out.println("A arraylist" + a.toString());
System.out.println("B arraylist" + b.toString() + "\n\n");
a.set(0, a.get(0).replace(0, 1, String.valueOf(4)));
System.out.println("Arralists after " + "updating a: ");
System.out.println("A arraylist" + a.toString());
System.out.println("B arraylist" + b.toString() + "\n\n");
Соответствующие журналы:
Arralists before:
A arraylist[1, 2, 3]
B arraylist[1, 2, 3]
Arralists after updating a:
A arraylist[4, 2, 3]
B arraylist[4, 2, 3]
Я хочу знатьЛучший способ избежать ссылок и создать копию массива.
РЕДАКТИРОВАТЬ
Я хочу сделать это в Android.@Eran предложил ответ с Java8, но возникли проблемы с совместимостью.Любая помощь будет оценена.