package com.wp.test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class ListCopyTest {
/**
* list1的数据addAll到list2, 位置还是一样的吗
* 位置一样,对象也是一样的
* 结论:
* list的addAll方法,是浅拷贝,拷贝后,对新的list中数据更改,对原来的list中对象有影响。
* 但是若是list中保存的是基本类型的数据,拷贝前后的数据就没有联系了。即对新的list更改,不会影响原来的list。
* @param args
*/
public static void main(String[] args) {
List<FileInfo> list1 = new ArrayList<FileInfo>();
list1.add(new FileInfo("fff", false));
list1.add(new FileInfo("bbb", true));
FileInfo fileInfo3 = new FileInfo("ddd", false);
list1.add(fileInfo3);
list1.add(new FileInfo("ccc", true));
list1.add(new FileInfo("eee", false));
list1.add(new FileInfo("aaa", true));
System.out.println("-----------list1内容-----------");
for (FileInfo fileInfo : list1) {
System.out.print(fileInfo.getFilename()+" ");//fff bbb ddd ccc eee aaa
}
System.out.println();
System.out.println("----------------------");
List<FileInfo> list2 = new ArrayList<FileInfo>();
list2.addAll(list1);
list1.get(0).setFilename("123423q4");//list1中对象属性发生变化,list2中对应的对象属性也会发生变化
list1.add(0,new FileInfo("111111111", true));//list1中增加或删除对象,list2中对象不会发生变化
list1.remove(2);//删除ddd
System.out.println();
System.out.println("-----------list1内容改变后-----------");
for (FileInfo fileInfo : list1) {
System.out.print(fileInfo.getFilename()+" ");//123423q4 bbb ddd ccc eee aaa
}
Collections.sort(list1, new Comparator<FileInfo>() {
@Override
public int compare(FileInfo o1, FileInfo o2) {
return o1.getFilename().compareTo(o2.getFilename());
}
});
System.out.println();
System.out.println("-----------list1排序后-----------");
for (FileInfo fileInfo : list1) {
System.out.print(fileInfo.getFilename()+" ");//123423q4 bbb ddd ccc eee aaa
}//list1排序,对list2没有影响
System.out.println();
System.out.println("-----------list2内容-----------");
for (FileInfo fileInfo : list2) {
System.out.print(fileInfo.getFilename()+" ");//123423q4 bbb ddd ccc eee aaa
}
///////////////////
System.out.println();
System.out.println("==============================");
List<String> list3 = new ArrayList<String>();
String one = "6666";
list3.add(one);
list3.add("3333");
list3.add("4444");
list3.add("2222");
list3.add("5555");
list3.add("1111");
System.out.println();
System.out.println("----------list3内容------------");
for (String string : list3) {
System.out.print(string+ " ");//6666 3333 4444 2222 5555 1111
}
List<String> list4 = new ArrayList<String>();
list4.addAll(list3);
list3.add(0,"0000");
one = "test";//若list3保存的是string等基本类型的值,修改成员的值,对新的list4没有影响,即list4中的值不变。
System.out.println();
System.out.println("------------list3增加成员后----------");
for (String string : list3) {
System.out.print(string+ " ");//0000 6666 3333 4444 2222 5555 1111
}
System.out.println();
System.out.println("------------list4内容----------");
for (String string : list4) {
System.out.print(string+ " ");//6666 3333 4444 2222 5555 1111
}
}
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class ListCopyTest {
/**
* list1的数据addAll到list2, 位置还是一样的吗
* 位置一样,对象也是一样的
* 结论:
* list的addAll方法,是浅拷贝,拷贝后,对新的list中数据更改,对原来的list中对象有影响。
* 但是若是list中保存的是基本类型的数据,拷贝前后的数据就没有联系了。即对新的list更改,不会影响原来的list。
* @param args
*/
public static void main(String[] args) {
List<FileInfo> list1 = new ArrayList<FileInfo>();
list1.add(new FileInfo("fff", false));
list1.add(new FileInfo("bbb", true));
FileInfo fileInfo3 = new FileInfo("ddd", false);
list1.add(fileInfo3);
list1.add(new FileInfo("ccc", true));
list1.add(new FileInfo("eee", false));
list1.add(new FileInfo("aaa", true));
System.out.println("-----------list1内容-----------");
for (FileInfo fileInfo : list1) {
System.out.print(fileInfo.getFilename()+" ");//fff bbb ddd ccc eee aaa
}
System.out.println();
System.out.println("----------------------");
List<FileInfo> list2 = new ArrayList<FileInfo>();
list2.addAll(list1);
list1.get(0).setFilename("123423q4");//list1中对象属性发生变化,list2中对应的对象属性也会发生变化
list1.add(0,new FileInfo("111111111", true));//list1中增加或删除对象,list2中对象不会发生变化
list1.remove(2);//删除ddd
System.out.println();
System.out.println("-----------list1内容改变后-----------");
for (FileInfo fileInfo : list1) {
System.out.print(fileInfo.getFilename()+" ");//123423q4 bbb ddd ccc eee aaa
}
Collections.sort(list1, new Comparator<FileInfo>() {
@Override
public int compare(FileInfo o1, FileInfo o2) {
return o1.getFilename().compareTo(o2.getFilename());
}
});
System.out.println();
System.out.println("-----------list1排序后-----------");
for (FileInfo fileInfo : list1) {
System.out.print(fileInfo.getFilename()+" ");//123423q4 bbb ddd ccc eee aaa
}//list1排序,对list2没有影响
System.out.println();
System.out.println("-----------list2内容-----------");
for (FileInfo fileInfo : list2) {
System.out.print(fileInfo.getFilename()+" ");//123423q4 bbb ddd ccc eee aaa
}
///////////////////
System.out.println();
System.out.println("==============================");
List<String> list3 = new ArrayList<String>();
String one = "6666";
list3.add(one);
list3.add("3333");
list3.add("4444");
list3.add("2222");
list3.add("5555");
list3.add("1111");
System.out.println();
System.out.println("----------list3内容------------");
for (String string : list3) {
System.out.print(string+ " ");//6666 3333 4444 2222 5555 1111
}
List<String> list4 = new ArrayList<String>();
list4.addAll(list3);
list3.add(0,"0000");
one = "test";//若list3保存的是string等基本类型的值,修改成员的值,对新的list4没有影响,即list4中的值不变。
System.out.println();
System.out.println("------------list3增加成员后----------");
for (String string : list3) {
System.out.print(string+ " ");//0000 6666 3333 4444 2222 5555 1111
}
System.out.println();
System.out.println("------------list4内容----------");
for (String string : list4) {
System.out.print(string+ " ");//6666 3333 4444 2222 5555 1111
}
}
}