java两个集合的交集,java判断两个集合是否相等
如何解决写爬虫IP受阻的问题?立即使用。
背景:
前端传输列表集,后端字段也存储表单(1,2,3,4)。没有sql的帮助,如何看出前端传输的集合是否在后端字段的集合中?
(学习视频分享:java教学视频)
代码:
公共静态布尔判断Intersection(列表字符串list1,列表字符串list2){
布尔标志=假;
//使用retainAll会改变list1的值,所以写一个替代
ListString origin=new ArrayList();
origin . addall(list 1);
origin.retainAll(列表2);
//有交集
if(origin.size()0){
flag=true
}
返回标志;
}boolean flag = origin.retainAll(Collection? c)
如果origin中有不在集合C中的数据,则返回false。不返回True。
同时,原点集合会发生变化,只保留两个集合相同的数据。换句话说,原始集合已经删除了数据,这将返回false。
那么如何判断是否有交集呢?
1.两套,都不一样,原点为空,返回值为假。
2.两套。正好origin中的数据都在C中,原点不变,返回值为真。
这两种特殊情况都是简单地通过返回值true或false来导致交集。所以根据原点集合的个数,0表示有交集。
retainAll(Collection? c)源码
public boolean retainAll(集合?c) {
//判断C集是否为空。
objects . require nonnull(c);
返回batchRemove(c,true);
}
私有布尔batchRemove(集合?c,布尔补码){
//获取调用此函数的集合。因为是引用类型,修改时会改变。
final Object[]element data=this . element data;
//w:所有记录交集的数据都放在elementData前面,w是其位置的边界。
int r=0,w=0;
//返回值用于判断elementData是否被修改。
布尔修改=假;
尝试{
//循环elementData集合,判断其中的元素是否在C集中。
for(;r尺寸;r)
//如果在集合里,那么W会自己增加,把这个值放在elementData[w]里,也就是把所有相交的数据放在集合前面。
if(c . contains(element data[r])==complement)
element data[w]=element data[r];
}最后{
//保留与AbstractCollection的行为兼容性,
//即使c.contains()抛出。
//正常情况下,经过上面的循环,r==size。为了防止循环异常,将R到size的数据放在对应W之后的位置,而不是放在对应W的位置。
if (r!=size) {
System.arraycopy(elementData,r,
元素数据,w,
size-r);
w=size-r;
}
//如果elementData中有C集中没有的数据,W位置之后的数据会被清理,进行垃圾回收。
如果(w!=size) {
//清除以让GC完成其工作
for(int I=w;I尺寸;我)
element data[I]=null;
//记录elementData集合被添加或删除的次数,这里是删除。
modCount=size-w;
//分配最新的大小
size=w;
//elementData集合已清理,modified为true
修改=真;
}
}
返回已修改;
}相关推荐:java入门教程以上是java如何判断两个集合是否有交集的详细内容。请多关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。