文档章节

Collection中的之retainAll()方法的理解

 南桥北木
发布于 01/16 21:17
字数 308
阅读 6
收藏 1
JDK

//在jdkapi中的方法,说明返回值为boolean类型,

boolean retainAll(Collection<?> c) ;

//api中给的注释

//Retains only the elements in this list that are contained in the specified collection

//只保留在此集合中存在的元素,

//A.retainAll(B),A调用这个方法之后,集合A中只剩下存在于B中的元素,返回值为false表示集合A没改变,返

回true集合A发生改变

//jdk中实现的源码

Boolean removeAll(Collection<?> c)

public boolean retainAll(Collection<?> c) { //返回值是否发生改变

    return batchRemove(c, true);

}

private boolean batchRemove(Collection<?> c, boolean complement) {

    final Object[] elementData = this.elementData;

    int r = 0, w = 0;

    boolean modified = false;

    try {

        for (; r < size; r++)

            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) {
            for (int i = w; i < size; i++)
                elementData[i] = null;
            modCount += size - w;
            size = w;
            modified = true;
        }
    }
    return modified;
}

example:

public class collection_test {

public static void main(String args[]) {

Collection c=new ArrayList();

Collection c1=new ArrayList(); c.add("a1"); c.add("a2");

c1.add("a3"); c1.add("a1"); c1.add("a2");

System.out.println(c.retainAll(c1)); System.out.println(c.toString()); System.out.println(c1.toString());

} }

结果: false [a1, a2] [a3, a1, a2]

© 著作权归作者所有

共有 人打赏支持
粉丝 1
博文 199
码字总数 35861
作品 0
武汉
私信 提问
Java 基础(三)集合源码解析 Collection

前面我们讲到了集合的定义以及集合的 Iterator。我们知道集合分为 Collection和 Map,今天我们的重点是学习 Collection。 什么是集合 我们再来回顾一下集合解决了什么问题:在编译期间不知道...

diamond_lin
2017/09/25
0
0
JavaSE|集合类、Collection、Iterator

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/darlingwood2013/article/details/83376830 JavaSE|JavaSE|集合类、Collection、Iterator 集合类概述 Collec...

叶晚林
2018/10/26
0
0
Java——容器(Set)

【Set接口】 <1>Set接口是Collection的子接口,Set接口没有提供额外的方法。 <2>实现Set接口的容器类中的元素是没有顺序的,而且不可以重复。 <3>Set容器可以与数学中“集合”的概念相对应。...

野渡书生
2016/03/11
1
0
Java集合框架_四_List接口

一、List? Collection接口往下继承产生了三个接口,它们有各自的特点,本文要学习的是具有“有序可重复”特点的 List 接口,它也叫做列表。 在列表中,这使得我们能够精确定位需要进行操作的...

mrbinary
2014/01/18
0
0
Java 集合框架_开篇

Java 集合框架系列 Java 集合框架开篇 Java 集合框架List Java 集合框架ArrayList Java 集合框架LinkedList Java有三大工具类框架非常值得我们学习,java集合框架,java并发框架,以及java ...

wo883721
2017/12/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

matlab-自控原理 nichols 由开环传递函数画出奈奎斯曲线

  matlab : R2018a 64bit     OS : Windows 10 x64 typesetting : Markdown    blog : my.oschina.net/zhichengjiu    gitee : gitee.com/zhichengjiu   code clearclcclosenu......

志成就
29分钟前
1
0
ABUSE建了个恶意网站数据库

数据库已经按不同类型标记了各种恶意网站,例如它们当前是否在线,恶意内容类型,潜在威胁信息等。安全软件开发人员和浏览器开发人员可以免费使用此数据库来帮助用户拦截可能存在威胁的恶意网...

linuxCool
今天
2
0
【SQL】- 高级用法

数值和字符范围比较: between select *from books where price>=23.5 and price<=35; -- 等价于select *from books where price between 23.5 and 35; -- between包含边界的比较>= / <=......

ZeroneLove
今天
8
0
RabbitMQ如何解决各种情况下丢数据的问题

1.生产者丢数据 如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Jav...

编程SHA
今天
5
0
JVM平台上的响应式流(Reactive Streams)规范

Reactive Streams 响应式流是一个倡议,用来为具有非阻塞后压的异步流处理提供一个标准。大家努力的目标集中在运行时环境(JVM和JavaScript)和网络协议上。 注:响应式流其实就是一个规范,...

java菜分享
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部