List取交集、并集、差集

金都高尔夫艺墅List取交集、并集、差集
突然被⾯试官问到这样⼀个问题,List怎么取交集。我想了⼀会后说道双重循环?
⾃⼰都觉得⾯试官想要的答案应该不是这个,效率太低了。
后⾯问⾯试官答案,⾯试官告诉我可以将其中⼀个llist转成⼀个map或set,再遍历第⼆个list的时候判断,map/set中是否存在该元素,这样就可以求出交集。可以省去很多⽐较,速度是绝对快很多。
public static void main(String[] args){
List<String> listA =new ArrayList<String>();
List<String> listB =new ArrayList<String>();
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 map =new HashSet();
for(String tmp: listA){
map.add(tmp);
}
for(String tmp: listB){
ains(tmp)){
System.out.println(tmp);
帕斯卡尔
}
}
}
运⾏结果如下
后来我⼜想有没有别的⽅法呢,于是⼜去⽹上搜了⼀波。然后我竟然发现ArrayList本⾝就提供了取交集的⽅法。
public static void main(String[] args){
List<String> listA =new ArrayList<String>();
List<String> listB =new ArrayList<String>();
listA.add("A");
listA.add("B");
listA.add("C");
listA.add("D");
listB.add("B");
listB.add("C");
listB.add("D");
listB.add("E");
xiaoeniSystem.out.println("交集:"+listA);
}
运⾏结果:
好奇之下我点进去看了源码
ArrayList对此⽅法进⾏了重写,先对传⼊的参数进⾏了⾮空判断
然后调⽤了batchRemove⽅法执⾏取交集逻辑
final Object[] elementData =this.elementData;
这⾥要注意的是这样赋值,elementData引⽤还是指向this.elementData,所以后⾯直接操作elementData改变的会是this。对⾃⾝进⾏了遍历,在遍历的过程中判断传进来的集合中是否包含当前元素,如果包含,则按顺序写⼊当前集合中。
finally中的第⼀个判断有点没懂,我理解的是执⾏完循环后r是必=size的,有⼤佬看懂了可以留⾔告诉我。
第⼆个判断就是将交集后⾯多余的元素去除。
并集
先去掉A中并集,再将B集合中元素放⼊A元素
public static void main(String[] args){
List<String> listA =new ArrayList<String>();
List<String> listB =new ArrayList<String>();
listA.add("B");
扬州大学 
listA.add("C");
listA.add("D");
listB.add("E");
listB.add("B");
listB.add("C");
listB.add("D");
listA.addAll(listB);
System.out.println(listA);
}
运⾏结果:
中医治股骨头坏死
差集
removeAll是去掉并集,这⾥求差集需要注意得在长集合中去掉并集。
否则可能出现集合A有B、C。集合B有B、C、D。此时veAll(listB),集合A中全是并集被全部移除,输出[]的情况。
public static void main(String[] args){
List<String> listA =new ArrayList<String>();
List<String> listB =new ArrayList<String>();
listA.add("B");
listA.add("C");
权力机关对行政立法的监督应当是
listA.add("D");
listB.add("E");
listB.add("B");
listB.add("C");
listB.add("D");
if(listB.size()>= listA.size()){
System.out.println(listB);
}else{
System.out.println(listA);
}
}
运⾏结果
参考:

本文发布于:2024-09-21 02:45:51,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/473098.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:集合   试官   交集   判断
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议