The right copy methods are as follows:
method 1:
ArrayList mycopy=new ArrayList();
mycopy=(ArrayList) vec.clone();
method 2:
ArrayList mycopy=new ArrayList(Arrays.asList(new Integer[vec.size()]));
Collections.copy(mycopy, vec);
wrong code
ArrayList y,c;
public static void main(String[] args) {
// TODO Auto-generated method stub
textFuzhi o=new textFuzhi();
o.ttt();
}
public void ttt()
{
y=new ArrayList();
for(int i=0;i<10;i++)
y.add(i);
c=y;
//the follows both wrong
//c=new ArrayList();
//c=y;
System.out.println("old y="+y.toString());
System.out.println("old c="+c.toString());
y.set(5, 29);
System.out.println("new y="+y.toString());
System.out.println("new c="+c.toString());
}
//output:
//old y=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
//old c=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
//new y=[0, 1, 2, 3, 4, 29, 6, 7, 8, 9]
//new c=[0, 1, 2, 3, 4, 29, 6, 7, 8, 9]
//This to say c and y use the same memory space, c will change too, if y was changed
right code
ArrayList y,c;
public static void main(String[] args) {
// TODO Auto-generated method stub
textFuzhi o=new textFuzhi();
o.ttt();
}
public void ttt()
{
y=new ArrayList();
for(int i=0;i<10;i++)
y.add(i);
c=(ArrayList)y.clone();
System.out.println("old y="+y.toString());
System.out.println("old c="+c.toString());
y.set(5, 29);
System.out.println("new y="+y.toString());
System.out.println("new c="+c.toString());
}
//output:
//old y=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
//old c=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
//new y=[0, 1, 2, 3, 4, 29, 6, 7, 8, 9]
//new c=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]