博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于AbstractCollection
阅读量:5826 次
发布时间:2019-06-18

本文共 3443 字,大约阅读时间需要 11 分钟。

  hot3.png

AbstractCollection

光从名字就能看出,这是一个实现了Collection接口的抽象类,当然我们不能光看一个名字就断定他的本质。所以很有必要看下源码是如何的,奉上源码:

public abstract class AbstractCollection
implements Collection

很好,看样子我猜的非常准,。continue.

我们先从插入方法中的add方法开始,二话不说,先源码:

/**     * {@inheritDoc}     *     * 

This implementation always throws an * UnsupportedOperationException. * * @throws UnsupportedOperationException {@inheritDoc} * @throws ClassCastException {@inheritDoc} * @throws NullPointerException {@inheritDoc} * @throws IllegalArgumentException {@inheritDoc} * @throws IllegalStateException {@inheritDoc} */ public boolean add(E e) { throw new UnsupportedOperationException(); }

唉呀呀呀,,,,,,发现没什么好看的,我觉得注释很有意思,他已经把这个方法可能碰到的异常都列举出来了,厉害。

看addAll方法:

public boolean addAll(Collection
c) { boolean modified = false; for (E e : c) if (add(e)) modified = true; return modified; }
瞄一眼后,觉得还是跳过为妙。next method!

好,clear方法,源码先:

public void clear() {        Iterator
it = iterator(); while (it.hasNext()) { it.next(); it.remove(); } }
哦,原来源码的clear是这样子实现的,相当的通用呀!赞一个。next!

contains方法

public boolean contains(Object o) {        Iterator
it = iterator(); if (o==null) { while (it.hasNext()) if (it.next()==null) return true; } else { while (it.hasNext()) if (o.equals(it.next())) return true; } return false; }
在这里不难发现,集合可以插入为null的对象。然后,对于是否包含的判断的条件为equals是否为true。

containsAll方法

public boolean containsAll(Collection
c) { for (Object e : c) if (!contains(e)) return false; return true; }
哦,原来是这样子,很简单嘛。下一个

isEmpty方法,看源码:

public boolean isEmpty() {        return size() == 0;    }
看下size方法

public abstract int size();
size方法原来是交给具体实现类来实现的呀,只要判断下size的返回值是不是为零就可以了,很简单。

Iterator方法

public abstract Iterator
iterator();
飞过,

remove方法

public boolean remove(Object o) {        Iterator
it = iterator(); if (o==null) { while (it.hasNext()) { if (it.next()==null) { it.remove(); return true; } } } else { while (it.hasNext()) { if (o.equals(it.next())) { it.remove(); return true; } } } return false; }
原来是通过迭代器来实现删掉操作的呀,厉害。呃,去挑个有意思的实现看看

retainAll方法

public boolean retainAll(Collection
c) { boolean modified = false; Iterator
it = iterator(); while (it.hasNext()) { if (!c.contains(it.next())) { it.remove(); modified = true; } } return modified; }

瞄了几眼后,发现这个方法的功能是求交集,有意思。

toArray方法

public Object[] toArray() {// Estimate size of array; be prepared to see more or fewer elements        Object[] r = new Object[size()];        Iterator
it = iterator(); for (int i = 0; i < r.length; i++) { if (! it.hasNext()) // fewer elements than expected return Arrays.copyOf(r, i); r[i] = it.next(); } return it.hasNext() ? finishToArray(r, it) : r; }
我靠,迭代器真是太厉害了,集合里不能少了迭代器这个神器。

转载于:https://my.oschina.net/tunie/blog/121523

你可能感兴趣的文章
关于Android四大组件的学习总结
查看>>
java只能的round,ceil,floor方法的使用
查看>>
由于无法创建应用程序域,因此未能执行请求。错误: 0x80070002 系统找不到指定的文件...
查看>>
新开的博客,为自己祝贺一下
查看>>
【CQOI2011】放棋子
查看>>
采用JXL包进行EXCEL数据写入操作
查看>>
一周总结
查看>>
将txt文件转化为json进行操作
查看>>
线性表4 - 数据结构和算法09
查看>>
Online Patching--EBS R12.2最大的改进
查看>>
Binary Search Tree Iterator leetcode
查看>>
uva-317-找规律
查看>>
Event事件的兼容性(转)
查看>>
我的2014-相对奢侈的生活
查看>>
zoj 2412 dfs 求连通分量的个数
查看>>
Java设计模式
查看>>
一文读懂 AOP | 你想要的最全面 AOP 方法探讨
查看>>
Spring Cloud 微服务分布式链路跟踪 Sleuth 与 Zipkin
查看>>
ORM数据库框架 SQLite 常用数据库框架比较 MD
查看>>
华为OJ 名字美丽度
查看>>