Мелкая копия 2 ArrayList в 1 в Java
ArrayList<String> myString = new ArrayList<String>();
myString.add("string_1");
myString.add("string_2");
ArrayList<String> yourString = new ArrayList<String>();
yourString.add("string_11");
yourString.add("string_12");
ArrayList<String> string1 = myString;
ArrayList<String> string2 = yourString;
Это будет мелкая копия myString
в string1
а также yourString
в string2
,
Итак, если я сделаю
myString.add("string_3");
string1.size()
даст мне 3
Как я могу мелко скопировать оба myString
а также yourString
в ArrayList сказать string3
(например ArrayList<String> string3 = myString + yourString
)?
3 ответа
ОБНОВЛЕНО
Этот метод поможет вам!
public static ArrayList<String> cloneList(ArrayList<String> yourList) {
ArrayList<List> clonedList = new ArrayList<String>(yourList.size());
for (String s : yourList) {
clonedList.add(new String(""));
}
return clonedList;
}
вот некоторый код: ArrayList<String> shallow = new ArrayList(yourOriginalList);
Единственный способ, которым я могу придумать, - это пойти сложным путем и написать ConcatList и реализовать List-Interface:
public class ConcatList<E> implements List<E> {
private List<E> head;
private List<E> tail;
public ConcatList(List<E> head, List<E> tail) {
super();
this.head = head;
this.tail = tail;
}
@Override
public int size() {
return head.size() + tail.size();
}
...
Это не ArrayList, но это может быть то, что вы хотите.
Почему бы вам не поддерживать три списка, myString, yourString и ourString.
List<String> ourString = new ArrayList<String>();
ourString.addAll(myString);
ourString.addAll(yourString);
Теперь ваш массив string3 может быть ссылкой на этот третий список. Теперь, когда вы обновляете myString или yourString, вы можете соответствующим образом обновлять ourString (в основном, выполняя две операции добавления вместо одной, которая по-прежнему O(1), по сравнению с O(n) при выполнении глубокой копии). Это также обновит string3, как вы хотите.