两个List<对象>集合 A集合中包含了B集合中的对象和其他对象。现在想从A中把B去掉要剩下的对象 怎么取出

两个List<对象>集合 A集合中包含了B集合中的对象和其他对象。现在想从A中把B去掉要剩下的对象 怎么取出

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了

温馨提示:答案为网友推荐,仅供参考
相似回答