list集合中removeAll()与addAll()两个方法与list.stream()求两个集合差集与和集的区别?

######碰巧用到了

问题相关代码,请

public class Test {
public static void main(String[] args) {
List list1 = new ArrayList<>();
list1.add(1);
list1.add(2);
list1.add(3);
List list2=new ArrayList();
list2.add(2);
list2.add(4);
list2.add(6);

List<Integer> list1Cha = list1.stream().filter(item -> list2.stream().noneMatch(item2 -> Objects.equals(item, item2))).collect(Collectors.toList());
List<Integer> list2Cha = list2.stream().filter(item -> list1.stream().noneMatch(item2 -> Objects.equals(item, item2))).collect(Collectors.toList());
    System.out.println(list1Cha);
    System.out.println(list2Cha);
    List<Integer> heList = list1.stream().filter(item -> list2.stream().anyMatch(item2 -> Objects.equals(item, item2))).collect(Collectors.toList());
    System.out.println(heList);
   list1.addAll(list2);
   System.out.println(list1);
    list1.removeAll(list2);
    System.out.println(list1);

}
  

}
勿粘贴截图

运行结果及报错

img


内容

List list3=new ArrayList();
    list3.addAll(list1);
    list1.removeAll(list2);
    System.out.println(list1);
    list2.removeAll(list3);
    System.out.println(list2);
    boolean b = list1.equals(list1Cha);
    System.out.println(b);
我想要达到的结果

一、我有些问题:
1.集合中元素为同一元素的判定条件是什么?值相等?是同一个对象?
2.集合和列表的区别是否清晰?集合:元素没有相同的元素;列表:允许有相同的元素。
二、解释list的removeAll()与addAll()与list.stream()求两个集合差集与和集的区别
1.list 的list1.removeAll(list2),从list1中删除所有在list2中存在的元素
2.list 的list2.addAll(list2),自list1尾部添加list2中的所有元素,不会验证是否存在相同的元素
3.通过代码实现符合你对该计算的理解,如果逻辑正确,符合你对集合计算的理解
4.如果想使用集合计算,并不想自己写代码可以考虑Set接口的实现类

addall是不管重复的,直接拼接在一起, 求合集会自动去掉重复项
removeall的时候如果里面没有,不知道会不会报错,但是求差集的时候即使没有也不会报错

多看看源码就清楚了