java集合中retainAll方法

article/2025/10/8 20:03:17

我们先来看看retainAll的源码

public boolean retainAll(Collection<?> c) {return batchRemove(c, true);
}
private boolean batchRemove(Collection<?> c, boolean complement) {//获得当前对象的所有元素final Object[] elementData = this.elementData;//w:交集中元素个数int r = 0, w = 0;//设置标记位boolean modified = false;try {//遍历集合Afor (; r < size; r++)//判断集合B中是否存在当前元素if (c.contains(elementData[r]) == complement)//存在则直接保存elementData[w++] = elementData[r];} finally {// Preserve behavioral compatibility with AbstractCollection,// even if c.contains() throws.if (r != size) {//复制剩余元素System.arraycopy(elementData, r, elementData, w, size - r);//当前集合大小w += size - r;}//集合长度发生变化if (w != size) {// clear to let GC do its workfor (int i = w; i < size; i++)//清除集合中元素elementData[i] = null;//记录modCount += size - w;//交集大小size = w;modified = true;}}return modified;
}

A.retainAll(B)

可以看到这个方法改变了集合A中的元素,将存在于集合A中但不存在于集合B中的元素移除。

如果集合A的大小发生了改变,返回true,即使两个集合完全没有交集,也会返回true。

如果集合A的大小没有发生改变,返回false,即使两个集合完全相同,也会返回false。

测试数据:

public class RetainAllDemo {public static void main(String[] args){int[] arr1={1,2,3,4};int[] arr2={1,2,3,5};int[] arr3={5,6,7,8};int[] arr4={1,2,3,4};initList(arr1, arr2, arr3, arr4);}private static void initList(int[] arr1, int[] arr2, int[] arr3, int[] arr4) {ArrayList<Integer> list1 = new ArrayList<Integer>();ArrayList<Integer> list2 = new ArrayList<Integer>();ArrayList<Integer> list3 = new ArrayList<Integer>();ArrayList<Integer> list4 = new ArrayList<Integer>();//测试数据 每个数组只有四个元素 不会越界for(int i=0; i < 4; i++){list1.add(arr1[i]);list2.add(arr2[i]);list3.add(arr3[i]);list4.add(arr4[i]);}//输出System.out.println(list2.retainAll(list1));System.out.println(list3.retainAll(list1));System.out.println(list4.retainAll(list1));}
}

输出结果:

所以,retainAll的返回值并不能用于判断两个集合是否存在交集,只能用于判断集合大小是否发生改变;

应该通过集合的大小判断两个集合是否有交集。

以上。

To be continued...


http://chatgpt.dhexx.cn/article/lGhNEABJ.shtml

相关文章

Java取交集方法retainAll()

1 retainAll方法示例 如何判断一个集合与另外一个集合中有相同的元素 例如A.retainAll(B); 如果AB中有相同的元素&#xff0c;那么A中会保留相同的元素&#xff0c;将不同的元素移除 如果AB中没有相同的元素&#xff0c;那么会返回[] 当A中的元素有变化时会返回true&#…

Java中取多个集合的交集——retainAll()

Java中取多个集合的交集 集合 Collection 接口中定义了 retainAll()方法 retainAll() Retains only the elements in this set that are contained in the specified collection (optional operation). In other words, removes from this set all of its elements that are …

测试工程师面试题答案分类详解

数据库最基本的增&#xff0c;删&#xff0c;改&#xff0c;查&#xff0c; 假设表结构为&#xff1a; create table student( sid number, sname varchar2(50) ) 1.增加&#xff1a;insert into student values(1,张三) 2.删除&#xff1a;delete from student 3.…

软件测试工程师面试题及答案

软件测试工程师试题 一、填空 1、软件测试阶段的基本任务应当是根据软件开发各阶段的 和程序的 &#xff0c;精心设计一批“高产”的测试用例&#xff0c;利用这些测试用例 &#xff0c;找出软件中潜藏的各种错误和缺陷。 2、测试用例不仅要选用合理的测试输入数据&…

测试笔试题

做了几套题&#xff0c;个别题竟然错了。汗颜。摘录下&#xff1a; 1.有关字节换算的 字节 byte&#xff1a;8个二进制位为一个字节(B)&#xff0c;最常用的单位&#xff0c;字节也就是B。 1KB (Kilobyte 千字节)1024B 1MB (Megabyte 兆字节 简称“兆”)1024KBA 1GB (Giga…

测试工程师面试题

选择题 进行兼容性测试的目的在于&#xff08;&#xff09; A、测试程序在不同的平台上可以正常运行B、测试程序与平台上的其他程序可以同时正常运行C、测试数据格式在不同应用程序之间可以通用D、以上选项都正确 某个 Android 应用耗电问题严重&#xff0c;以下那个是可能的…

软件测试工程师面试题汇总

小编热衷于收集整理资源&#xff0c;记录踩坑到爬坑的过程。希望能把自己所学&#xff0c;实际工作中使用的技术、学习方法、心得及踩过的一些坑&#xff0c;记录下来。也希望想做软件测试的你一样&#xff0c;通过我的分享可以少走一些弯路&#xff0c;可以形成一套自己的方法…

100道经典软件测试笔试题(附答案)一次性查缺补漏个够

千呼万唤始出来&#xff0c;很多群友说我看了这么多面试题&#xff0c;但是公司要笔试怎么办&#xff1f;有没有能够笔试给我们练练手&#xff0c;这边我也是特意帮大家整理了这么100道软件测试的笔试题&#xff0c;答案在最后&#xff0c;试试自己能答对多少吧&#xff01;需要…

软件测试工程师笔试题(附带答案)

软件测试题目 一、 判断题 (每题2分&#xff0c;20) 1、软件测试就是为了验证软件功能实现的是否正确&#xff0c;是否完成既定目标的活动&#xff0c;所以软件测试在软件工程的后期才开始具体的工作。 &#xff08;初级&#xff09; &#xff08; &#xff09; 2、发现错误多…

初级测试工程师面试笔试题(附带答案)

1.编写测试用例有哪几种方法&#xff1f; 答&#xff1a;大刚法、等价类、边界值、因果图、场景法、正交法、错误推断法、正则表达式 2.测试的六条基本法则是什么&#xff1f; 答&#xff1a;功能、可靠性、易用性、效率、可维护性、可移植性 3.软件测试分类有哪些&#xff1f;…

2022年最新软件测试工程师笔试真题及答案(搜狐、华为、蓝港在线)

搜狐软件测试工程师笔试真题及答案 试题1&#xff0e;下列哪个覆盖的范围最广&#xff1f;条件、条件组合、语句、判定条件。 答案&#xff1a;条件组合。 试题2&#xff0e;Java Web应用的3层结构是什么&#xff1f; 答案&#xff1a;浏览器/中间层&#xff08;Java ASP等…

hadoop安装前的网络环境配置

1.1 网络配置 对安装好的 VMware 进行网络配置&#xff0c;方便虚拟机连接网络&#xff0c;本次设置建议选择 NAT 模 式&#xff0c;需要宿主机的 Windows 和虚拟机的 Linux 能够进行网络连接&#xff0c;同时虚拟机的 Linux 可 以通过宿主机的 Windows 进入互联网。 1.1.1 编…

Windows下Hadoop的环境变量的配置以及Hadoop的配置文件修改

Hadoop的环境变量的配置 1.进入系统变量&#xff0c;右键单击我的电脑 –>属性 –>高级环境变量配置 –>高级选项卡 –>环境变量 –> 单击新建HADOOP_HOME 2.在系统变量path 里面 添加 %HADOOP_HOME%\bin; 3.测试&#xff1a;打开命令行cmd ,在任意路径下输入h…

Hadoop应用配置

文章目录 hadoop目录配置hadoop角色hadoop运行和使用hadoop 观察FsImage和EditLog分发配置 hadoop目录 bin &#xff1a;功能模块sbin&#xff1a;shell脚本etc&#xff1a;配置lib&#xff1a;使用库 bin和sbin目录都要加入到环境变量中。 vi /etc/profile增加&#xff1a; …

配置Hadoop_1

配置Hadoop_1 1. 配置jdk2. 配置Hadoop3.完全分布式运行环境&#xff08;配置集群&#xff09;3.1 编写集群分发脚本xsync3.2 rsync远程同步工具3.3 xsync集群分发脚本3.4 SSH无密登录配置3.5集群配置3.6 配置历史服务器3.7 配置日志的聚集 3.8 两个常用脚本asd 1. 配置jdk 上…

hadoop集群配置(保姆级教学)

目录 1 .集群配置 &#xff08;1&#xff09;集群部署规划 (2&#xff09;配置文件说明 (3&#xff09;配置集群 &#xff08;1&#xff09;核心配置文件 &#xff08;2&#xff09;HDFS配置文件 &#xff08;3&#xff09;YARN配置文件 &#xff08;4&#xff09;MapRedu…

Hadoop集群配置

一&#xff1a;集群部署规划 注意&#xff1a; ➢ NameNode和SecondaryNameNode不要安装在同一台服务器 ➢ ResourceManager也很消耗内存&#xff0c;不要和NameNode、SecondaryNameNode配置在同一台机器上。 二&#xff1a;配置文件说明 Hadoop配置文件分两类&#xff1a…

Hadoop配置环境变量(详解版)

1.运行hadoop的程序报错java.io.IOException: Could not locate executable nullinwinutils.exe in the Hadoop binaries. **这是因为windows环境变量不兼容的原因解决办法&#xff1a; 首先需要下载 hadoop的tar.gz包&#xff0c;前提是JDK必须配置成功&#xff0c;存放路径不…

hadoop配置文件

安装前的工作&#xff1a; jdk集群中节计算机互联互通关闭防火墙节点间的计算机免密码登录&#xff08;authorized_keys认证文件root用户存放在/root/.ssh/&#xff09; (User用户 /home/user/.ssh/) A计算机免密码登录B计算机&#xff0c;将A计算机的公钥存放在B计算机的认证…

4.Hadoop环境配置

4. 集群配置 4.1 集群部署规划 安装前先做好节点规划&#xff0c;完全分布式目前规划1个主节点&#xff08;Master&#xff09;和2个从节点&#xff08;Slave&#xff09;一共三个节点。 部署规划要求&#xff1a; NameNode和SecondaryNameNode不要安装在同一台服务器。Reso…