1 retainAll方法示例

如何判断一个集合与另外一个集合中有相同的元素

例如A.retainAll(B);

如果AB中有相同的元素,那么A中会保留相同的元素,将不同的元素移除

如果AB中没有相同的元素,那么会返回[]

当A中的元素有变化时会返回true,没有变化会返回false

    @Testpublic void test6(){List<Integer> list1 = new ArrayList<>();List<Integer> list2 = new ArrayList<>();for (int i = 0; i < 20; i++) {list1.add(i);if (i%2 == 0 ){list2.add(i);}}System.out.println(list1); //[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]System.out.println(list2); //[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]list1.retainAll(list2);System.out.println(list1); //[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]}

结果:

2 源码解析

为了更好的解析源码,我们写一个简单的demo来打断点示例下

    @Testpublic void test6(){List<Integer> list1 = new ArrayList<>();List<Integer> list2 = new ArrayList<>();list1.add(1);list1.add(2);list2.add(2);list1.retainAll(list2);System.out.println(list1); //2}

    boolean batchRemove(Collection<?> c, boolean complement, int from, int end) {Objects.requireNonNull(c);  //获取list2的值Object[] es = this.elementData; // 获取源数据list1中的值for(int r = from; r != end; ++r) {  //循环判断list2中是否包含list1的元素,将相同的元素放入list1数组中if (c.contains(es[r]) != complement) { int w = r++; try {for(; r < end; ++r) {Object e;if (c.contains(e = es[r]) == complement) {es[w++] = e;}}} catch (Throwable var12) {System.arraycopy(es, r, es, w, end - r);w += end - r;throw var12;} finally {this.modCount += end - w;this.shiftTailOverGap(es, w, end);}return true;}}return false;}
源码看了一半,实在看不下去了,等之后有机会在补充吧

注意:我们不能根据判断返回的结果来判断二者集合是否有交集,应该判断list1中的长度是否有变化来判断,例如:

我们list1和list2中元素个数相同,并且有交集,但是其返回却是false。因为list1中的集合长度没有变化。

Java取交集方法retainAll()相关推荐

  1. java的取整_Java取整方法总结

    package com.hit; import java.math.BigDecimal; public class MathRounding { /** * * 项目名称: Java取整方法 * 包 ...

  2. Java——取整与四舍五入

    一.Java取整方法 1.强制类型转换 public class Main {public static void main(String[] args){System.out.println(&qu ...

  3. java 求交集 算法_Java计算交集,差集,并集的方法示例

    Java计算交集,差集,并集的方法示例 发布时间:2020-10-07 10:37:46 来源:脚本之家 阅读:106 作者:benbenkui 本文实例讲述了Java计算交集,差集,并集的方法.分享 ...

  4. Java基础-集合类-ArrayList retainAll() 方法

    一. retainAll 方法 retainAll() 方法用于保留 arraylist 中在指定集合中也存在的那些元素,也就是删除指定集合中不存在的那些元素. retainAll() 方法的语法为: ...

  5. 【Java】对两个Set取交集,差集,并集

    1.取交集(取两个集合中都存在的元素) HashSet<String> setA = new HashSet<>(); HashSet<String> setB = ...

  6. mysql 取交集 php_mysql 查询结果取交集的方法

    本文将详细介绍MySQL中如何实现以SQL查询返回的结果集取交集的实现方法,需要的朋友可以参考 1 MySQL中如何实现以下SQL查询 (SELECT S.Name FROM STUDENT S, T ...

  7. java中random方法取值范围_Java中的Random()函数

    今天在做Java练习的时候注意到了Java里面的一个随机函数--Random,刚开始只是知道这个函数具有随机取值的作用,于是上网搜索了资料一番,做了一下一些关于Random函数的总结: Java中存在 ...

  8. java map 允许null值,Map取值方法,其中取得多种值,避免null值转换

    ~~~ import java.math.BigDecimal; import java.util.Date; import java.util.Map; /** * * Map取值方法,其中取得多种 ...

  9. [java]Map取值方法,其中取得多种值,避免null值转换

    import java.math.BigDecimal; import java.util.Date; import java.util.Map;/*** <p>* Map取值方法,其中取 ...

  10. Java中的取整方法

    在Java中,Math类有四个取整方法 方法 描述 ceil(x) x向上取整为它最接近的整数,以双精度值返回 floor(x) x向下取整为它最接近的整数,以双精度值返回 rint(x) x取整为它 ...

最新文章

  1. 关于使用android系统设备充当web服务器的一点准备
  2. [原创]敏捷管理实践看板思维导图
  3. iOS开发(4)UITextField
  4. sendData to ABAP backend via multiple form content type
  5. 【Python】Matplotlib画布图案保存为PDF文件
  6. 在Xuper链上部署Java语言智能合约和分析存证合约的实现逻辑
  7. rm 使用正则表达式 删除文件
  8. JS将16进制颜色转为rgba格式
  9. MATLAB eof用法,经验正交函数分析法(EOF)在matlab上的实现
  10. [buuctf.reverse] 144_[XMAN2018排位赛]easyvm 147_[XNUCA2018]Code_Interpreter
  11. Android +kotlin Banner 轮播广告 获取后台数据
  12. 用python做一张图片_用 Python 生成一张有“内涵”的图片
  13. xp 无法关闭计算机,xp系统关机时一直显示正在关机状态却无法关键的解决方法...
  14. HNUST OJ 2207 函数最小值
  15. ABeam( 德硕 ) 携手北京优锘科技共同探讨”数字孪生可视化运营”方案
  16. 神奇太阳能电池:自动跟着太阳走
  17. 2021全新改版影视app系统源码(全开源)
  18. VirtualNES虚拟红白机
  19. 什么是python 之禪
  20. 推荐收藏!10大程序员必备生产力工具

热门文章

  1. 樽海鞘算法(Salp Swarm Algorithm: SSA)
  2. 软件开发文档的编写---软件研制任务书 (2015-03-14 17:55:03)转载▼ 标签: 软件 文档 任务书 需求 要求 分类: 软件过程改进 一. 简介 客户要
  3. 游戏资源提取常用工具索引
  4. 针对HTTPS网页打开缓慢或者打不开的问题
  5. 盈通785G显卡超频/开核教程
  6. 主板 稳定测试软件,拷机必不可少 编辑推荐几款稳定性测试软件
  7. Springboot入门级教程详解
  8. android投屏小米盒子,Mibox S 小米盒子国际版:可能是 2019 新年最值的原生 AndroidTV...
  9. SFI立昌SHA系列方案与应用
  10. 数字化营销如何打造全链路数据统计解决方案