【Java集合】LinkedList詳解中篇
阿新 • • 發佈:2019-02-15
rst 需要 源碼 -o linked 興趣 app equal 頭節點
4、unlinkFirst(Node f)
這是關於LinkedList的第二篇文章,我將會源碼分析LinkedList的部分重要代碼,關鍵地方我都有註釋說明,希望大家能比較明白的看懂!
分析源碼按照順序分析:
- 變量
- 構造方法
- 方法
一、變量
註意:如果一個鏈表沒有節點,那麽first和last都為null
二、構造方法
三、方法
1、linkFirst(E e)
方法描述:將e這個節點加入鏈表頭
註意:
- 頭節點的pre指針指向的是null,並沒有指向尾節點,所以並不是循環雙向鏈表。
- 如果當前鏈表只有一個節點,那麽first和last指針均指向該節點
2、linkLast(E e)
方法描述:將e這個節點加入鏈表尾
註意:
- 尾節點的next指針指向的是null,並沒有指向頭節點,所以並不是循環雙向鏈表。
- 如果當前鏈表只有一個節點,那麽first和last指針均指向該節點
3、linkBefore(E e, Node succ)
方法描述:將e這個節點加入到不為空的succ節點之前
註意:
- 該方法是往【succ節點】前加節點,所以需要判斷該節點是否是頭節點,原因是需要更改first這個指針指向的節點
步驟:
- 構造新的節點,它的prev指向【succ節點】的前一個節點,它的next指向【succ節點】
- 【succ節點】的prev指向新的節點
- 【succ節點】的前一個節點的next指向新節點
4、unlinkFirst(Node f)
方法描述:去掉不為空的頭節點
註意:
- 如果【f節點】不是頭結點,那麽【f節點】之前【包括f節點】都將從鏈表中斷開丟掉,只是size的減一存在問題
步驟:
- first指針指向【下一個節點】
- 【f節點】的next不再指向【下一個節點】
5、unlinkLast(Node l)
方法描述:去掉不為空的尾節點
註意:
- 如果【l節點】不是尾結點,那麽【尾節點】之後【包括l節點】都將從鏈表中斷開丟掉,只是size的減一存在問題
步驟:
- last指針指向【上一個節點】
- 【上一個節點】的next指向null
6、unlink(Node x)
方法描述:去掉不為空的【x節點】
步驟:
- 【上一個節點】的next指針指向【下一個節點】,【x節點】prev指向null
- 【下一個節點】的prev指針指向【上一個節點】,【x節點】next指向null
7、簡單方法的概括
8、add(E e)
方法描述:向鏈表插入1個元素
註意:
- add方法默認是加元素加入【尾節點】
9、remove(Object o)
方法描述:移除鏈表中某個節點
註意:
- 這裏判斷了【被移除元素】是否為null的情況,為空則==即可,如果不為null,則需要equals來判斷是否相等
- == 和 equals的區別小夥伴們有興趣可以查一查
10、addAll
方法描述:添加新的節點到鏈表中
11、clear()
方法描述:清除鏈表
【Java集合】LinkedList詳解中篇