Re: Does the clone() method of ArrayList<> make a copy of the objects in the ArrayList?
On Aug 3, 7:28 pm, Knute Johnson <nos...@rabbitbrush.frazmtn.com>
wrote:
Arne Vajh=F8j wrote:
xz wrote:
anotherArrayList = (ArrayList<Something>) oneArrayList.clone();
anotherArrayList.get(0).makeSomeChange();
Will the change made in the second line make effect on
oneArrayList.get(0)?
clone is a shallow clone not a deep clone so yes.
Arne
Arne:
I know that it says in the docs that ArrayList.clone() is a shallow copy
and that the elements themselves are not copied. Why then does the
following code produce the following results (or have I gone completely
around the bend today?).
import java.util.*;
public class test9 {
public static void main(String[] args) {
ArrayList<Integer> list1 = new ArrayList<Integer>();
list1.add(10);
list1.add(11);
list1.add(12);
ArrayList list2 = (ArrayList)list1.clone();
this line copies every item in list1 into list2 such that
list1.get(i) = list2.get(i) for i = 0, 1, 2,
which means, two references (0th item in list1 and 0th item in list2)
point to the same thing, but they themselves are not identical.
list1.set(0,20);
now you changed the 0th item in list1, in other words, you let the the
0th item in list1, which is a reference, point to another thing (20).
This process has nothing to do with list2, meaning 0th item in list2
still points to 10.
list1.add(30);
for (int i=0; i<list1.size(); i++)
System.out.print(list1.get(i)+" ");
System.out.println();
for (int i=0; i<list2.size(); i++)
System.out.print(list2.get(i)+" ");
}
}
C:\Documents and Settings\Knute Johnson>java test9
20 11 12 30
10 11 12
However, as I konw ArrayList can only deal with classes, e.g. Integer,
but not primitive types like int. How come your code compiles?