『java.util』 AbstractCollection
来源:互联网 发布:g3开票软件 编辑:程序博客网 时间:2024/06/06 04:33
这个抽象类实现了collection接口,实现了collection的部分方法:
1. isEmpty(); return size()==0; 设计很精妙啊
2. contain(Object o); 实现方式还是用迭代器来迭代整个集合来比较o是不是在集合里面的
3. Object[] toArray(); 他的实现方法很诡异啊 , 代码如下
public Object[] toArray() { // Estimate size of array; be prepared to see more or fewer elements Object[] r = new Object[size()]; Iterator<E> 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; }得到了size之后还有判断两次it.hasNext(),第一次的判断,难道迭代器中间的位置会有null么,还有最后的it.hasNext(),上面已经得到迭代器的size了,把这个长度里面内容都已经放到Object数组里面了,it.hasNext()肯定是null了啊。或者难道说这就是线程不安全的证明么?这样是为了提供线程安全性么,个人认为是防止在进行toArray操作的时候,集合被其他线程改变了。补充:这两次判断是用来防止,在得到size()和创建迭代器之间,容器的大小发生了改变,比如容器remove和add了,而不是用来防止线程不安全。(其实仔细想,还是会有防止不安全的成分在里面,)
4. <T> T[] toArray(T[] a); 实现方式和上面差不多,多了判断a是否能完成的放下整个容器的对象。代码太神奇了
5. <T> T[] finishToArray(); 当迭代器的长度大于上面得到的size的时候,就用调用这个方法把迭代器没有叠带到的部分放到数组里面,
//未完成待续。
补充 小小知识点,:
1. 数组的大小是不可以改变的,system.copyof();拷贝数组
ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦LinkedList 采用的将对象存放在独立的空间中,而且在每个空间中还保存下一个链接的索引 但是缺点就是查找非常麻烦 要丛第一个索引开始
0 0
- 『java.util』 AbstractCollection
- java.util.AbstractCollection翻译
- java.util.AbstractCollection
- java.util.AbstractCollection
- java.util.AbstractCollection学习笔记
- 3-1、java.util.AbstractCollection
- 解析java.util集合类源码(Collection和AbstractCollection篇)
- java——深入java.util包(collection接口之AbstractCollection)
- java.util.Collection体系源码解读<三>AbstractCollection抽象类源码解读
- Java AbstractCollection源码分析
- 源码分析-java-AbstractCollection
- Java集合之AbstractCollection
- java 集合框架-AbstractCollection
- AbstractCollection
- java的AbstractCollection源码分析
- Java源码解析 AbstractCollection<E>
- java集合系列03 AbstractCollection
- java集合分析(4):AbstractCollection
- 改变导航栏
- java 操作FTP服务器(1)-连接服务器测试
- 【算法】新角度“指点”PID算法
- linux面试之-谈谈你理解的堆和栈
- uva11151
- 『java.util』 AbstractCollection
- javascript数据类型
- 全球排名前500的网站都是做什么的
- 继承系统的ViewFlipper类,实现广告位轮播的功能。
- Xcode 7.2 免证书真机调试
- 第6章 让他人心悦诚服的心理策略
- WebSocket 原理
- 使用命名空间、头文件和实现文件
- linux面试之-多线程的用武之地