2017-02-03 14 views
0

Я пробовал все, но всегда ссылается на предыдущий.Как скопировать один массивList в другой без повторного вызова?

mListPreviousData = new ArrayList<>(); 
for (int i = 0; i < mAddedList.size(); i++) { 
    mListPreviousData.add(mAddedList.get(i)); 
} 
+0

просто сделать mListPreviousData = (ArrayList ) mAddedList.clone(); Вам нужно включить в свой тип arraylist –

+1

Тип обоих элементов массива - это то же самое, почему он ссылается на предыдущий – UserSharma

+0

Вы можете использовать библиотеку [this] (https://github.com/google/guava) или конструктор, который вы можете получить ** мелкой ** копии. – DwlRathod

ответ

1

Вам нужно сделать глубокую копию основных объектов:

mListPreviousData = new ArrayList<>(); 
for (int i = 0; i < mAddedList.size(); i++) { 
    mListPreviousData.add(mAddedList.get(i).clone()); 
} 

Предпочтительно, чтобы вы реализовать свой собственный clone() метод.

Edit:

Или сделать глубокую копию всего ArrayList:

mListPreviousData = (..cast to your type..) mAddedList.clone(); 
+0

недостаток, если исходные данные списка изменены, клонированная копия будет автоматически обновлена. –

+0

То же самое, что я не хочу, мне нужны два отдельных списка. – UserSharma

+0

Если вы не хотите создавать два отдельных списка, клонировав свой объект списка, тогда вам нужно создать элемент списка данных каждый раз в цикле, а затем добавить в список mListPreviousData. Возможно, вам нужно каждый раз создавать новый объект. –

0
mListPreviousData = new ArrayList<>(); 
mListPreviousData.addAll(mAddedList); 
+0

. конкретный орган для вашего ответа, для лучшего понимания. – W4R10CK

 Смежные вопросы

  • Нет связанных вопросов^_^