List 源码分析笔记
List Class Diagram:
笔记一:
1、Iterable 接口只定义一个iterator()方法。
Iterator 接口有hasNext, next, remove方法。
ListIterator接口继承Iterator接口,增加了hasPrevicous,previous,nextIndex, previousIndex,add,set方法。
2、AbstractCollection中:
(1)public <T> T[] toArray(T[] a) 方法: 如果数组a空间足够则将数据填充到a中,否则建立一个新的数组。
(2)addAll方法中有一个add成功就返回true。
(3)removeAll 方法中有个remove成功就返回true。
3、AbstractList:
(1)SubList内部类底层依赖于list. 使用偏移量实现操作。Sublist,用户操作下标从0开始。
4、迭代器维护expectedModCount 变量与List的modCount进行比较,如果不一致则抛出ConcurrentModificationException异常。
final void checkForComodification() {
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
}
笔记二:
5、List特性
(1)有序,可重复,允许Null
(2)Clone: 浅拷贝
6、ArrayList
(1)存储结构: 数组
(2)序列化:
transient 修饰elementData[]
ArrayList自己实现了writeObject 和ReadObject.在默认序列化的基础上,序列化list.size 和每一个元素。
(3)ListIterator迭代器当前状态是指向next,当调用previous时,返回的是next.previous,此时lastReturned和next指向同一个元素。
7、LinkedList
(1)存储结构:双向链表, 由一个header来引导,不存放实际信息。
(2)序列化:transient修饰 header
LinkedList自己实现了writeObject 和ReadObject.在默认序列化的基础上,序列化list.size 和每一个元素。
(3)ListIterator迭代器当前状态是指向next,当调用previous时,返回的是next.previous,此时lastReturned和next指向同一个元素。
8、CopyOnWriteArrayList
CopyOnWriteArrayList是ArrayList的一个变形,继承了arraylist的特性,线程安全。在进行set, add, remove 等改变性操作时都会对整个数组进行复制并替换。
(1)、适用于改变较少频繁读取的场景。
(2)、迭代器是只读的,不能进行修改。
(3)、在进行set,add,remove等改变性操作时会使用ReentranceLock进行加锁。
最新文章
- Html.DropDownLis绑定数据库
- 日常工作bug总结
- 第3月第11天 vs2005调试 ace编译
- Oracle 常见错误排查
- 查看局域网内在线的主机ip和mac地址
- WPF oxyPlot 使用总结
- SQL Server里因丢失索引造成的死锁
- 04-23 Android 课堂笔记
- [Redis] RDB &; AOF
- C#面向对象基础01
- SQL语句查找重复记录
- Java中的哈希
- 完美:adobe premiere cs6破解版下载[序列号+汉化包+破解补丁+破解教程]
- 部署一个class文件
- Android的回调
- X-006 FriendlyARM tiny4412 u-boot移植之Debug串口用起来
- 这一次,VR离我们真的很近
- FTRL(Follow The Regularized Leader)学习总结
- vue-resource+element upload上传(遇到formData总是变为object格式)
- skynet记录7:服务(c和lua)