1.LinkedList基本说明:
-
1).LinkedList底层实现了双向链表和双端队列的特点
-
2).可以添加任意元素(元素可以重复,包括null)
-
3).线程不安全,没有实现同步和互斥
2.LinkedList的 底层操作机制
-
1).LinkedList底层维护了一个双向链表
-
2).LinkedList中维护了两个属性first和last分别指向首节点和尾结点
-
3).每个节点(Node对象),里面又维护了prev/next/item三个属性,其中通过prev指向前一个,通过next指向后一个节点,最终实现双向链表
-
4).所以LinkedList的元素的添加和删除,不是通过数组完成的,相对来说效率较高,不涉及数组的扩容
-
5).双向链表走向图
-
底层代码分析
List list = new LinkedList()
解读:
1.new Linkedlist() 底层会构建一个无参构造函数
2.add(“1”) 会调用一个linklast函数,返回一个Boolean值,为true
3.linkLast()
3.1 声明一个node节点L,将listedlist 中last 节点 赋值给L 如果 linkedList 为 null 的话 last 也为 null ,不为null 的话,last指向上一个节点
3.2 声明一个新节点,将 L 的节点 赋值给 newNode 新节点中prev对象中的item,然后将新节点的尾部设置为null
3.3 判断 如果 last 节点 为null的话, 设置为首节点也叫第一个节点, 如果不为null的将新节点赋值给last对象中的next的item属性然后size++ , 最后 修改次数modCount++
3.ArrayList和LinkedList比较
如何选择ArrayList和linkedList:
- 如果我们改查的操作多,选择ArrayList
- 如果我们增删的操作多,选择LinkedList
- 一般来说,在程序中80%-90%都是查询,因此大部分情况下会选择ArrayList
- 在一个项目中,根据业务灵活选择,也可能这样,一个模块使用的是ArrayList,另一个模块是LinkedList