学习ArrayList到另一个ArrayList的浅copy
浅copy就是返回元素一样的ArrayList,但是元素本身并没有copy,如果原来元素的内容改变了,两个ArrayList内容都会随着改变(两部分公用元素)
深copy是指复制后两部分完全没有交集,各自有各自的元素。
package com.studyJava.stringStudy;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
/**
* 线性表的copy
* @author ywf
*
*/
public class ArrayListCopy {
/**
* 线性表的浅层copy,拷贝内容,引用
*/
public void copy1(ArrayList list){
ArrayList listnew = new ArrayList();
listnew=(ArrayList) list.clone();
System.out.println(list);
System.out.println("方法:copy1() "+"比较内容是否相等:"+listnew.equals(list));
System.out.println("方法:copy1() "+"比较引用是否相等:"+(listnew==list));
System.out.println(list);
System.out.println(listnew);
}
/**
* 浅层copy方法2
* @param list
*/
public void copy2(ArrayList list){
ArrayList listnew = new ArrayList();
for(Object o :list){
listnew.add(o);
}
System.out.println("方法:copy2() "+"比较内容是否相等:"+listnew.equals(list));
System.out.println("方法:copy2() "+"比较引用是否相等:"+(listnew==list));
System.out.println(list);
System.out.println(listnew);
}
/**
* 浅层copy方法3
* @param list
*/
public void copy3(ArrayList list){
ArrayList listnew = new ArrayList();
listnew.addAll(list);
System.out.println("方法:copy3() "+"比较内容是否相等:"+listnew.equals(list));
System.out.println("方法:copy3() "+"比较引用是否相等:"+(listnew==list));
System.out.println(list);
System.out.println(listnew);
}
/**
* 浅层copy方法2
*/
public void copy4(ArrayList list){
ArrayList listnew = new ArrayList(Arrays.asList(new Object[list.size()]));
Collections.copy(listnew, list);
System.out.println("方法:copy4() "+"比较内容是否相等:"+listnew.equals(list));
System.out.println("方法:copy() "+"比较引用是否相等:"+(listnew==list));
System.out.println(list);
System.out.println(listnew);
}
public static void main(String[] args){
ArrayListCopy test = new ArrayListCopy();
ArrayList list = new ArrayList();
int [] array ={1,2,3,45};
for(int i=0;i<array.length;i++){
list.add(array[i]);
}
test.copy1(list);
test.copy2(list);
test.copy3(list);
test.copy4(list);
}
}