您的位置:首页 > 编程语言 > Java开发

java复制那些事

2015-12-18 20:31 555 查看
在开发中,复制是我们经常遇到的。

今天用arraylist来对比一下java中collections的几种复制:

=
clone()
new arraylist(arraylist)
Collections.copy

我们可以写一个这样的程序

public class COPY {
static ArrayList<Integer> arrayList1;
static ArrayList<Integer> arrayList2;
static ArrayList<Integer> arrayList3;

public static void main(String[] args) {
arrayList1 = new ArrayList<>();
arrayList2 = new ArrayList<>();

for (int i = 0; i < 10; i++) {
arrayList1.add(i);
}

//=
arrayList2 = arrayList1;
if (arrayList2 == arrayList1) {
System.out.println("==指向对象");
}

//copy
arrayList1 = new ArrayList<>();
arrayList2 = new ArrayList<>();
arrayList2 = (ArrayList<Integer>) arrayList1.clone();
if (arrayList2 != arrayList1) {
System.out.println("clone()创建新对象");
}else {
System.out.println("clone()指向对象");
}

//new Arraylist(old_arraylist)
arrayList1 = new ArrayList<>();
arrayList2 = new ArrayList<>();
arrayList3 = arrayList2;
for (int i = 0; i < 10; i++) {
arrayList1.add(i);
}
arrayList2 = new ArrayList<>(arrayList1);
if (arrayList2 == arrayList1) {
System.out.println("new Arraylist(old_arraylist)指向对象");
}else {
System.out.println("new Arraylist(old_arraylist)不指向对象");
}

if (arrayList2 == arrayList3) {
System.out.println("new Arraylist(old_arraylist)只复制数值");
}else {
System.out.println("new Arraylist(old_arraylist)创建新的对象");
}

arrayList1 = new ArrayList<>();
arrayList2 = new ArrayList<>();
arrayList3 = arrayList2;
for (int i = 0; i < 10; i++) {
arrayList1.add(i);
}
for (int i = 10; i < 20; i++) {
arrayList2.add(i);
}
//注意,copy需要两个collection对象size相同
Collections.copy(arrayList2, arrayList1);
System.out.println(arrayList2);
if (arrayList2 == arrayList1) {
System.out.println("Collections.copy指向对象");
}else {
System.out.println("Collections.copy不指向对象");
}

if (arrayList3 == arrayList2) {
System.out.println("Collections.copy只复制数值");
}else {
System.out.println("Collections.copy创建新的对象");
}

}
}


他的输出结果是这样的:
==指向对象
clone()创建新对象
new Arraylist(old_arraylist)不指向对象
new Arraylist(old_arraylist)创建新的对象
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Collections.copy不指向对象
Collections.copy只复制数值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java