LinkedList源码解析

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

源码分析

构造方法

LinkedList源码解析_第1张图片
构造方法一个是默认的,另外一个是传入一个集合,然后调用 addAll 方法添加集合所有的元素

Node

LinkedList源码解析_第2张图片
每个节点都包含了前一个节点 prev 以及后一个节点 next ,item 就是要当前节点要存储的元素

add方法

LinkedList源码解析_第3张图片

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

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

LinkedList源码解析_第4张图片

node方法

LinkedList源码解析_第5张图片

linkBefore方法

LinkedList源码解析_第6张图片

addAll方法

LinkedList源码解析_第7张图片
addAll(int index, Collection c) 其实就是相当于多次进行 add(int index, E element) 操作,在内部循环添加到链表上。

get方法

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

remove 方法

remove(int index) 中调用了 unlink(Node x) 方法来移除该节点
LinkedList源码解析_第8张图片
LinkedList源码解析_第9张图片
remove(Object o) 的代码就是遍历链表,然后得到相等的值就把它 unlink(x) 了。

set方法

LinkedList源码解析_第10张图片

clear方法

LinkedList源码解析_第11张图片

你可能感兴趣的:(LinkedList源码解析)