本文介绍: 交集差集并集不去重去重elementData引用还是指向this.elementData,所以后面直接操作elementData改变的会是this。对自身进行了遍历,在遍历的过程中判断传进来的集合中是否包含当前元素,如果包含,则按顺序写入当前集合中。ArrayList对此方法进行了重写,先对传入的参数进行了非空判断。第二个判断就是将交集后面多余的元素去除。
交集
public static void main(String[] args) {
List<String> listA = new ArrayList<>();
List<String> listB = new ArrayList<>();
listA.add("A");
listA.add("B");
listA.add("C");
listA.add("D");
listB.add("B");
listB.add("C");
listB.add("D");
listB.add("E");
Set set = new HashSet();
for (String tmp: listA) {
set.add(tmp);
}
for (String tmp: listB) {
if(set.contains(tmp)){
System.out.println(tmp);
}
}
}
上边代码可以简化为一行代码,使用List源码中retainAll(List list)
listA.retainAll(listB)
结果:
B,C,D
ArrayList对此方法进行了重写,先对传入的参数进行了非空判断
final Object[] elementData = this.elementData;
这里要注意的是这样赋值,elementData引用还是指向this.elementData,所以后面直接操作elementData改变的会是this。
对自身进行了遍历,在遍历的过程中判断传进来的集合中是否包含当前元素,如果包含,则按顺序写入当前集合中。
差集
public static void main(String[] args) {
List<String> listA = new ArrayList<>();
List<String> listB = new ArrayList<>();
listA.add("A");
listA.add("B");
listA.add("C");
listA.add("D");
listB.add("B");
listB.add("C");
listB.add("D");
listB.add("E");
List<String> listC = new ArrayList<>();
listC.addAll(listA);
// 方法一: for循环
for (String s : listB) {
listA.remove(s);
}
System.err.println(listA);
// 方法二: list自带方法
listC.removeAll(listB);
System.err.println(listC);
}
结果:
[A]
[A]
并集
不去重
public static void main(String[] args) {
List<String> listA = new ArrayList<>();
List<String> listB = new ArrayList<>();
listA.add("A");
listA.add("B");
listA.add("C");
listA.add("D");
listB.add("B");
listB.add("C");
listB.add("D");
listB.add("E");
listA.addAll(listB);
}
结果:
[A, B, C, D, B, C, D, E]
去重
public static void main(String[] args) {
List<String> listA = new ArrayList<>();
List<String> listB = new ArrayList<>();
listA.add("A");
listA.add("B");
listA.add("C");
listA.add("D");
listB.add("B");
listB.add("C");
listB.add("D");
listB.add("E");
List<String> listC = new ArrayList<>();
listC.addAll(listA);
// 方法一: for循环
for (String s : listB) {
if (!listA.contains(s)) {
listA.add(s);
}
}
System.err.println(listA);
// 方法二: list自带方法
listC.removeAll(listB);
listC.addAll(listB);
System.err.println(listC);
}
结果:
[A, B, C, D, E]
[A, B, C, D, E]
————————————————————–欢迎叨扰此地址—————————————————————
本文作者:Java技术债务
原文链接:https://cuizb.top/myblog/article/detail/1699263234
版权声明: 本博客所有文章除特别声明外,均采用 CC BY 3.0 CN协议进行许可。转载请署名作者且注明文章出处。
原文地址:https://blog.csdn.net/qq_40124555/article/details/134808449
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_48900.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。