removeAll
举个例子
public static void main(String[] args) {
List list1 = new ArrayList();
list1.add("1111");
list1.add("2222");
list1.add("3333");
List list2 = new ArrayList();
list2.add("3333");
list2.add("4444");
list2.add("5555");
// 并集
// list1.addAll(list2);
// 交集
// list1.retainAll(list2);
//差集
list1.removeAll(list2);
// 无重复并集
// list2.removeAll(list1);
// list1.addAll(list2);
Iterator<String> it = list1.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
// System.out.println("-----------------------------------\n");
// printStr(list1);
}
public static void printStr(List list1) {
for (int i = 0; i < list1.size(); i++) {
System.out.println(list1.get(i));
}
}
追问removeAll()只能对值类型处理,引用对象不行,List里面是一个个实体类,实体类里面有id name什么的字段get()set()方法。
追答那是因为值类型java知道什么时候是相等的,它是定义好的。而你自己写的实体类,它怎么知道哪个和哪个是相同的,比如List里你存的是Student对象,student1和student2怎么知道是相同的。所以你需要自定义比较函数,让List去调用你自定义的比较函数。
所以写实体类时尽量Override hashCode和equals方法,不这样说不定哪天就会出问题。
你把equals方法覆盖重写成你自定义的,就OK了