LinkedList的源码阅读笔记

LinkedList的源码阅读笔记

1,基本的链表实现,内部类Node表示存储节点。
2,移除某个节点时,会手动将节点的item属性设为null,以便GC更好的收集。
3,addAll()方法也并没有调用入参的集合的迭代器,而是将其toArray()后,循环这个数组。
4,调用clear()时,为了防止某个迭代器还在引用,也为了GC的回收,将每个节点的内容及前后引用都手动设置为null。
5,定位某个位置的节点时,根据位置距离头尾的距离来决定从first还是last节点开始查找。
6,LinkedList在内部覆盖了listIterator(),但是没有覆盖iterator(),所以LinkedList.iterator()调用过程如下:
LinkedList.iterator() -> AbstractSequentialList.iterator() -> AbstractList.listIterator() -> LinkedList.listIterator(int index)
最终返回的是LinkedList.ListItr对象实例,稍微有点绕,有兴趣的朋友可以打断点试试。
7,如果没有ListIterator.nextIndex(),里面其实可以不用设定nextIndex变量来记录当前位置的。
8,序列化时会将size和“顺序排列的元素流”依次跟在“默认ArrayList对象流”后面。

你可能感兴趣的:(LinkedList的源码阅读笔记)