LinkedList源码解析

2018-03-14  本文已影响3人  第一号伤心人

LinkedList 是有序并且可以元素重复的集合,底层是基于双向链表的。

源码分析

构造方法

构造方法一个是默认的,另外一个是传入一个集合,然后调用 addAll 方法添加集合所有的元素

Node

每个节点都包含了前一个节点 prev 以及后一个节点 next ,item 就是要当前节点要存储的元素

add方法

        在 linkLast(E e) 中,先去判断了原来的尾节点是否为空。如果尾节点是空的,那么就说明原来的列表是空的。会将头节点也指向该元素;如果不为空,直接在后面追加即可。其实在 first 之前,还有一个为 null 的 head 节点。head 节点的 next 才是 first 节点。

add重载方法add(int index, E element)

node方法

linkBefore方法

addAll方法

addAll(int index, Collection c) 其实就是相当于多次进行 add(int index, E element) 操作,在内部循环添加到链表上。

get方法

在内部调用了 node(index) 方法,而 node(index) 方法在上面已经分析过了。就是判断在前半段还是在后半段,然后遍历得到即可。

remove 方法

remove(int index) 中调用了 unlink(Node x) 方法来移除该节点 remove(Object o) 的代码就是遍历链表,然后得到相等的值就把它 unlink(x) 了。

set方法

clear方法

上一篇下一篇

猜你喜欢

热点阅读