Java ArrayList copy
I have an ArrayList
l1
of size 10. I assign l1
to new list reference type l2
. Will l1
and l2
point to same ArrayList
object? Or is a copy of the ArrayList
object assigned to l2
?
When using the l2
reference, if I update the list object, it reflects the changes in the l1
reference type also.
For example:
List<Integer> l1 = new ArrayList<Integer>();
for (int i = 1; i <= 10; i++) {
l1.add(i);
}
List l2 = l1;
l2.clear();
Is there no other way to assign a copy of a list object to a new reference variable, apart from creating 2 list objects, and doing copy on collections from old to new?
Solution 1:
Yes, assignment will just copy the value of l1
(which is a reference) to l2
. They will both refer to the same object.
Creating a shallow copy is pretty easy though:
List<Integer> newList = new ArrayList<>(oldList);
(Just as one example.)
Solution 2:
Try to use Collections.copy(destination, source);
Solution 3:
Yes l1
and l2
will point to the same reference, same object.
If you want to create a new ArrayList based on the other ArrayList you do this:
List<String> l1 = new ArrayList<String>();
l1.add("Hello");
l1.add("World");
List<String> l2 = new ArrayList<String>(l1); //A new arrayList.
l2.add("Everybody");
The result will be l1
will still have 2 elements and l2
will have 3 elements.
Solution 4:
Another convenient way to copy the values from src ArrayList to dest Arraylist is as follows:
ArrayList<String> src = new ArrayList<String>();
src.add("test string1");
src.add("test string2");
ArrayList<String> dest= new ArrayList<String>();
dest.addAll(src);
This is actual copying of values and not just copying of reference.
Solution 5:
There is a method addAll() which will serve the purpose of copying One ArrayList to another.
For example you have two Array Lists: sourceList and targetList, use below code.
targetList.addAll(sourceList);