LinkedList 是有序并且可以元素重復的集合鸦列,底層是基于雙向鏈表的敞恋。
源碼分析
構造方法
構造方法一個是默認的留凭,另外一個是傳入一個集合,然后調(diào)用 addAll 方法添加集合所有的元素
Node
每個節(jié)點都包含了前一個節(jié)點 prev 以及后一個節(jié)點 next 兴枯,item 就是要當前節(jié)點要存儲的元素
add方法
????????在?linkLast(E e)?中席揽,先去判斷了原來的尾節(jié)點是否為空顽馋。如果尾節(jié)點是空的,那么就說明原來的列表是空的幌羞。會將頭節(jié)點也指向該元素寸谜;如果不為空,直接在后面追加即可新翎。其實在 first 之前程帕,還有一個為 null 的 head 節(jié)點。head 節(jié)點的 next 才是 first 節(jié)點地啰。
add重載方法add(int index, E element)
node方法
linkBefore方法
addAll方法
addAll(int index, Collection c)?其實就是相當于多次進行?add(int index, E element)?操作愁拭,在內(nèi)部循環(huán)添加到鏈表上。
get方法
在內(nèi)部調(diào)用了?node(index)?方法亏吝,而?node(index)?方法在上面已經(jīng)分析過了岭埠。就是判斷在前半段還是在后半段,然后遍歷得到即可。
remove 方法
remove(int index)?中調(diào)用了?unlink(Node x)?方法來移除該節(jié)點
remove(Object o)?的代碼就是遍歷鏈表惜论,然后得到相等的值就把它?unlink(x)?了许赃。
set方法
clear方法