看看 AbstractCollection 吧

今天饶有兴趣的打开了 java 文档,点开上面的 TREE,可以看到各个类的依赖关系,但是这里还是看不到和接口的关系,因为类可以实现多个接口的,所以在这样的文档中就不好展现了吧。

ee51399ae1b3bcb9c89b1de8f1ff6f9ae1d.jpg

因为平常使用中,集合类用的比较多,所以想写一下结合类的内容,下面可以看到集合类的关系,这样看上去还是蛮清楚的吧,我们就先来看看第一个 AbstractCollection

04f4147b70c2f529f3678ade5da897ac2bd.jpg

可以看到继承 AbstractCollection 类的关系,看这个比看那些图清晰了一些,这里没有展现出来的是实现的两个接口 

Iterable<E>Collection<E>

在 Collection 中是里面定义饿了集合该实现的方法,这里面还涉及到泛型的概念,直接继承的有AbstractListAbstractQueueAbstractSetArrayDequeConcurrentLinkedDeque 

让我们先来看看 Collection<E> 接口里面定义了哪些要实现的通用方法吧,其实可以看到是 interface Collection<E> extends Iterable<E> ,以下是 java 8 中 Iterable 的方法 ,在之前的版本应该是没有 default 定义的接口实现的。

f0c18dd3b33f1021fd4346a5670f3688d89.jpg

在 Collection<E> 中定义集合的一些方法,java 1.8 (可以看到 default 的 stream 方法),像集合的 hashCode, add ,equals 都是很值得一说的,在effective java 讲的比较多,我就等着出第三版的时候买一本吧,可能啊亚马逊上英文版的好贵呀。

f74ce147b652d57c06ecc196d723295ff4f.jpg

然后看看今天的标题 AbstractCollection 抽象类,看看里面实现了哪些方法

5fa0e4218a8084cad79c4b608160f2c5219.jpg

我们看看contains 方法,这里用了迭代器返回的进行遍历,其实 iterator()方法是实现类自己实现的,这里会对传值是否为 null 的判断,因为下面会使用 equals 方法。

bfe489a04279b6221deb610f4a9526df16c.jpg

我们看到的报 UnsupportedOperationException 就是这么来的

84e9072dd3fd7bff5aa8a99571a51d4379d.jpg

这个 remove 方法和contains 方法如出一辙

b3018a3e90df8b8b13438a704ce91b9f40e.jpg

containsAll 方法遍历集合里面的元素,但是contains 会判断 参数是否为空,但是这里又不会,那么这么写list.containsAll(null); 不会报错了。

66698e1dacac3f870817fe0e6688d59cad7.jpgaddAll 这里会记录有没有修改 modified 字段标识,这里就看怎么实现的,相同的 item 到底算不算 add 成功,这里就可以玩点花样了。

8a1482ae09b2f53aed0884610e09f732931.jpg

removeAll 这里又对参数 c 做了判断,真是奇怪,这里有什么讲究吗?

950372bf2cb19749b0f4033704b908c3299.jpg

85fb213ac4ee7b731c1bb7673cd0aa85e7d.jpg

最后看看 toString 方法吧,因为 String 是会变的,所以用了 StringBuilder,只是这一行            sb.append(e == this ? "(this Collection)" : e); 这个this 是代表集合自己吗?

f14a7e5751eed6fcbaa2d8bbc15264a8436.jpg

这里还看不太明白的是 toArray 方法,为什么要这么写呢,暂时还想不明白,再看看吧

e60ccfabeb3174a0a57e82170c847c1ebdb.jpg

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/u/2277632/blog/1839015

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值