LinkedList的源碼閱讀筆記
1,基本的鏈表實現(xiàn),內(nèi)部類Node表示存儲節(jié)點。
2,移除某個節(jié)點時,會手動將節(jié)點的item屬性設(shè)為null,以便GC更好的收集。
3,addAll()方法也并沒有調(diào)用入?yún)⒌募系牡鳎菍⑵鋞oArray()后,循環(huán)這個數(shù)組。
4,調(diào)用clear()時,為了防止某個迭代器還在引用,也為了GC的回收,將每個節(jié)點的內(nèi)容及前后引用都手動設(shè)置為null。
5,定位某個位置的節(jié)點時,根據(jù)位置距離頭尾的距離來決定從first還是last節(jié)點開始查找。
6,LinkedList在內(nèi)部覆蓋了listIterator(),但是沒有覆蓋iterator(),所以LinkedList.iterator()調(diào)用過程如下:
LinkedList.iterator() -> AbstractSequentialList.iterator() -> AbstractList.listIterator() -> LinkedList.listIterator(int index)
最終返回的是LinkedList.ListItr對象實例,稍微有點繞,有興趣的朋友可以打斷點試試。
7,如果沒有ListIterator.nextIndex(),里面其實可以不用設(shè)定nextIndex變量來記錄當前位置的。
8,序列化時會將size和“順序排列的元素流”依次跟在“默認ArrayList對象流”后面。
posted on 2012-09-08 03:11 王星游 閱讀(270) 評論(0) 編輯 收藏 所屬分類: java