一、 retainAll 方法

public boolean retainAll(Collection<?> c) {
//调用自己的私有方法
return batchRemove(c, true);
}

二、batchRemove 方法解析

如果此 collection 由于调用而发生更改,则返回 true

//集合A比较与集合B的交集
private boolean batchRemove(Collection<?> c, boolean complement) {
//获得当前对象的所有元素
final Object[] elementData = this.elementData;
//w:标记两个集合公共元素的个数
int r = 0, w = 0;
//设置标志位
boolean modified = false;
try {
//遍历集合A
for (; r < size; r++)
//判断集合B中是否包含集合A中的当前元素
if (c.contains(elementData[r]) == complement)
//如果包含则直接保存。
elementData[w++] = elementData[r];
} finally {
// 如果 c.contains() 抛出异常
if (r != size) {
//复制剩余的元素
System.arraycopy(elementData, r,
elementData, w,
size - r);
//w为当前集合A的length
w += size - r;
}
//如果集合A的大小放生改变
if (w != size) {
// 清除工作
for (int i = w; i < size; i++)
elementData[i] = null;
//记录集合中元素的改变(add/remove)
modCount += size - w;
//设置当前数组的大小
size = w;
//返回为true
modified = true;
}
}
return modified;
}

1、关于modCount变量的说明

AbstractList包含一个modCount变量,它的初始值是0,当集合中的内容每被修改一次时(调用add(), remove()等方法),modCount加1

2、关于返回值的说明

如果集合A数组的大小没有改变,则返回false。如果集合A和集合B是完全相同的集合,也会返回false。

    public static void main(String[] args) {
ArrayList<String> listA= new ArrayList<String>();
listA.add("Tom");
ArrayList<String> listB= new ArrayList<String>();
listB.add("Tom");
System.out.println(listA.retainAll(listB)); //false
}

即使两个集合没有交集,也会返回true。

public static void main(String[] args) {
ArrayList<String> listA= new ArrayList<String>();
listA.add("Tom");
ArrayList<String> listB= new ArrayList<String>();
listB.add("Jack");
System.out.println(listA.retainAll(listB));//true
}

所以,我们要记住:当集合A的大小改变的时候返回的是True,大小没有改变的时候返回的是False。

三、正确的使用 retainAll 方法

public static void main(String[] args) {
ArrayList<String> listA= new ArrayList<String>();
listA.add("Tom");
ArrayList<String> listB= new ArrayList<String>();
listB.add("Tom");
listA.retainAll(listB);
if(listA.size()>0){
System.out.println("这两个集合有相同的交集");
}else{
System.out.println("这两个集合没有相同的交集");
}
}

1、首先调用retainAll的方法

2、通过判断集合的大小,来确定是否存在交集。不能通过方法返回的True和False来判断。

【转】带你正确的使用List的retainAll方法求交集的更多相关文章

  1. 带你正确的使用List的retainAll方法求交集

    一. retainAll 方法 public boolean retainAll(Collection<?> c) { //调用自己的私有方法 return batchRemove(c, ...

  2. win7自带wifi win7无线网络共享设置图文方法

    win7自带wifi win7无线网络共享设置图文方法 点评:开启windows 7的隐藏功能:虚拟WiFi和SoftAP(即虚拟无线AP),就可以让电脑变成无线路由器,实现共享上网,节省网费和路由器 ...

  3. 正确的lnamp支持SSI的方法!即支持SHTML和include调用!

    正确的lnamp支持SSI的方法!即支持SHTML和include调用! 个地方:一个是apache和nginx里的conf文件 第一步:修改apache里的httpd.conf文件 查找:AddTy ...

  4. 你的服务器没有正确响应Token验证的解决方法

    你的服务器没有正确响应Token验证,请阅读消息接口使用指南 微信 微信公众平台开发模式 平台 消息 接口 启用 URL Token作者:http://txw1958.cnblogs.com/ 原文: ...

  5. 微信公众平台消息接口开发(2)你的服务器没有正确响应Token验证的解决方法

    你的服务器没有正确响应Token验证,请阅读消息接口使用指南 微信 微信公众平台开发模式 平台 消息 接口 启用 URL Token作者:http://txw1958.cnblogs.com/ 本系统 ...

  6. 理解Vue.mixin,带你正确的偷懒

    关于Vue.mixin在vue官方文档中是这么解释的: 混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能.一个混入对象可以包含任意组件选项.当组件使用混入对象时,所有 ...

  7. 【转】两道面试题,带你解析Java类加载机制(类初始化方法 和 对象初始化方法)

    本文转自 https://www.cnblogs.com/chanshuyi/p/the_java_class_load_mechamism.html 关键语句 我们只知道有一个构造方法,但实际上Ja ...

  8. 【MySQL】MySQL使用正确密码却认证失败问题解决方法

    前言:笔者根据 #MySQL忘记密码,重置密码方法 ,修改密码后.使用修改后的正确密码怎么也登录不上数据库,然后经过以下方法,重新登录数据库. 1.确认MySQL安装目录下没有data(Data)文件 ...

  9. 正确使用stl map的erase方法

    先声明:下面的文章是针对windows的用法,因为std::map的erase函数的windows的实现版本是返回一个std::map的迭代器,但是STL标准里面的该函数的返回值确是: map.era ...

随机推荐

  1. 云端搭建Linux学习环境 链接https://edu.aliyun.com/article/19 (阿里云ECS服务器 )课堂

    云端搭建Linux学习环境 链接https://edu.aliyun.com/article/19 1. 开通云服务器 2 1.包年包月   按量付费(适合测试数据的时候) 2 2.地域   服务器数 ...

  2. 青橙 A1255. 拉拉队排练(陶文博)

    A1255. 拉拉队排练(陶文博) 时间限制:1.0s   内存限制:512.0MB   总提交次数:   AC次数:   平均分:   将本题分享到:        查看未格式化的试题   提交   ...

  3. web安全问题-cookie

    web安全问题 cookie 1.cookies只能设置过期 不能删除 <script> now.toGMTString() => 事件可以用来设置cookie document.c ...

  4. cron定时备份数据库

    1.定时备份数据库 shell 脚本 #!/bin/bash # export and backup the abgent_web database.sql mysqldump -uusername ...

  5. CF671A Recycling Bottles 计算几何

    It was recycling day in Kekoland. To celebrate it Adil and Bera went to Central Perk where they can ...

  6. CF708B Recover the String 构造

    For each string s consisting of characters '0' and '1' one can define four integers a00, a01, a10 an ...

  7. Jmeter 集成Excel读写接口参数返回值

    输入VIN然后获取返回值json 串,拼接非规则json 标题头 以下是返回的json串 { "error": "success", "result& ...

  8. 弃用serv-u,改用 Xlight FTP

    Serv-u 强大,设置也较麻烦一点,针对serv-u的攻击也很丰富.试用期只有一个月,破解版的用着也不放心 Xlight FTP 设置简单,个人版免费使用,感觉良好!

  9. JavaScript权威指南--立即执行函数

    千万不要停下追逐梦想的脚步 (function(){ //execute this method immediatly. //content... }());

  10. 解决SharePoint密码更新后,创建Web Application 失败

    问题在sharepoint central administration中通过Configuration Wizards来创建一个web application,出现如下错误: The passwor ...