浅拷贝2在Java中将ArrayList转换为1

时间:2016-03-16 20:36:59

标签: java android arraylist shallow-copy

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;

这将浅层复制myStringstring1yourStringstring2

所以,如果我这样做

myString.add("string_3");

string1.size()会给我3

如何将myStringyourString浅层复制到ArrayList中string3(例如ArrayList<String> string3 = myString + yourString)?

3 个答案:

答案 0 :(得分:0)

为什么不维护三个列表,myString,yourString和ourString。

List<String> ourString = new ArrayList<String>();
ourString.addAll(myString);
ourString.addAll(yourString);

现在,您的string3数组可以引用此第三个列表。现在,无论何时更新myString或yourString,都可以相应地更新ourString(基本上,执行两个添加操作而不是一个,仍然是O(1),与执行深拷贝时的O(n)相比)。这也将根据需要更新string3。

答案 1 :(得分:0)

<强>已更新

这种方法会对你有所帮助!

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);

答案 2 :(得分:0)

我能想到的唯一方法就是努力工作并编写一个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,但它可能是你想要的。