java两个集合的交集,java判断两个集合是否相等

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: