How do I copy the contents of one ArrayList into another?

后端 未结 12 1638
傲寒
傲寒 2020-11-27 10:46

I have some data structures, and I would like to use one as a temporary, and another as not temporary.

ArrayList myObject = new ArrayList

        
                      
相关标签:
12条回答
  • 2020-11-27 11:21

    Here is a workaround to copy all the objects from one arrayList to another:

     ArrayList<Object> myObject = new ArrayList<Object>();
    ArrayList<Object> myTempObject = new ArrayList<Object>();
    
    myObject.addAll(myTempObject.subList(0, myTempObject.size()));
    

    subList is intended to return a List with a range of data. so you can copy the whole arrayList or part of it.

    0 讨论(0)
  • 2020-11-27 11:23

    originalArrayList.addAll(copyArrayList);

    Please Note: When using the addAll() method to copy, the contents of both the array lists (originalArrayList and copyArrayList) refer to the same objects or contents. So if you modify any one of them the other will also reflect the same change.

    If you don't wan't this then you need to copy each element from the originalArrayList to the copyArrayList, like using a for or while loop.

    0 讨论(0)
  • 2020-11-27 11:27

    Lets try the example

         ArrayList<String> firstArrayList = new ArrayList<>();
                firstArrayList.add("One");
                firstArrayList.add("Two");
                firstArrayList.add("Three");
                firstArrayList.add("Four");
                firstArrayList.add("Five");
                firstArrayList.add("Six");
                //copy array list content into another array list
                 ArrayList<String> secondArrayList=new ArrayList<>();
                secondArrayList.addAll(firstArrayList);
                //print all the content of array list
                Iterator itr = secondArrayList.iterator();
                while (itr.hasNext()) {
                    System.out.println(itr.next());
                }
    

    In print output as below

    One
    Two
    Three
    Four
    Five
    Six

    We can also do by using clone() method for which is used to create exact copy

    for that try you can try as like

     **ArrayList<String>secondArrayList = (ArrayList<String>) firstArrayList.clone();**
        And then print by using iterator
          **Iterator itr = secondArrayList.iterator();
                    while (itr.hasNext()) {
                        System.out.println(itr.next());
                    }**
    
    0 讨论(0)
  • 2020-11-27 11:28

    There are no implicit copies made in java via the assignment operator. Variables contain a reference value (pointer) and when you use = you're only coping that value.

    In order to preserve the contents of myTempObject you would need to make a copy of it.

    This can be done by creating a new ArrayList using the constructor that takes another ArrayList:

    ArrayList<Object> myObject = new ArrayList<Object>(myTempObject);
    

    Edit: As Bohemian points out in the comments below, is this what you're asking? By doing the above, both ArrayLists (myTempObject and myObject) would contain references to the same objects. If you actually want a new list that contains new copies of the objects contained in myTempObject then you would need to make a copy of each individual object in the original ArrayList

    0 讨论(0)
  • 2020-11-27 11:31

    Came across this while facing the same issue myself.

    Saying arraylist1 = arraylist2 sets them both to point at the same place so if you alter either the data alters and thus both lists always stay the same.

    To copy values into an independent list I just used foreach to copy the contents:

    ArrayList list1 = new ArrayList();
    ArrayList list2 = new ArrayList();
    

    fill list1 in whatever way you currently are.

    foreach(<type> obj in list1)
    {
        list2.Add(obj);
    }
    
    0 讨论(0)
  • 2020-11-27 11:33

    Copy of one list into second is quite simple , you can do that as below:-

    ArrayList<List1> list1= new ArrayList<>();
    ArrayList<List1> list2= new ArrayList<>();
    //this will your copy your list1 into list2
    list2.addAll(list1);
    
    0 讨论(0)
提交回复
热议问题