I have the below java code:
List<SomePojo> list = new ArrayList<SomePojo>(); //add 100 SomePojo objects to list. Now list has 100 objects.
If I create one more instance as below:
List<SomePojo> anotherList = new ArrayList<SomePojo>(); anotherList.addAll(list); Now, how many objects will be in memory: 100 or 200 objects?
In the line below, are objects being added or only references?
anotherList.addAll(list); If I make any change to list, do the same changes reflect to anotherList and vice-versa?
5 Answers
An object is only once in memory. Your first addition to list just adds the object references.
anotherList.addAll will also just add the references. So still only 100 objects in memory.
If you change list by adding/removing elements, anotherList won't be changed. But if you change any object in list, then it's content will be also changed, when accessing it from anotherList, because the same reference is being pointed to from both lists.
100, it will hold the same references. Therefore if you make a change to a specific object in the list, it will affect the same object in anotherList.
Adding or removing objects in any of the list will not affect the other.
list and anotherList are two different instances, they only hold the same references of the objects "inside" them.
Citing the official javadoc of List.addAll:
Appends all of the elements in the specified collection to the end of this list, in the order that they are returned by the specified collection's iterator (optional operation). The behavior of this operation is undefined if the specified collection is modified while the operation is in progress. (Note that this will occur if the specified collection is this list, and it's nonempty.) So you will copy the references of the objects in list to anotherList. Any method that does not operate on the referenced objects of anotherList (such as removal, addition, sorting) is local to it, and therefore will not influence list.
Excerpt from the Java API for addAll(collection c) in Interface List see here
"Appends all of the elements in the specified collection to the end of this list, in the order that they are returned by the specified collection's iterator (optional operation)."
You you will have as much object as you have in both lists - the number of objects in your first list plus the number of objects you have in your second list - in your case 100.
no... Once u have executed the statement anotherList.addAll(list) and after that if u change some list data it does not carry to another list
0