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對象流”后面。