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?
Try to use
Collections.copy(destination, source);
Yes
l1
andl2
will point to the same reference, same object.If you want to create a new ArrayList based on the other ArrayList you do this:
The result will be
l1
will still have 2 elements andl2
will have 3 elements.Java doesn't pass objects, it passes references (pointers) to objects. So yes, l2 and l1 are two pointers to the same object.
You have to make an explicit copy if you need two different list with the same contents.
Another convenient way to copy the values from src ArrayList to dest Arraylist is as follows:
This is actual copying of values and not just copying of reference.
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);
Yes, assignment will just copy the value of
l1
(which is a reference) tol2
. They will both refer to the same object.Creating a shallow copy is pretty easy though:
(Just as one example.)