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方法