声明:以下内容纯属个人理解,有不正确之处请积极指正!
LinkedList
底层是什么?
LinkedList底层是一个双向链表,内部使用一个
Node
对象来维护链表的结构。
初始化参数有哪些?
- 初始化链表大小
size=0
; - 默认初始化一个空链表,简单概括就是
Node<E> first = last = null;
链表结构是怎样的?
看一下这个链表到底长什么样子?
如下图所示,主要看第二个元素添加至链表的时候它是怎么去连接第一个和第三个元素的。
简单点就是下面这样的结构:
链表结构是怎么维护的这一点要是清楚了的话,LinkedList的一些常规操作应该也不是很难理解。
比如添加操作,无论是添加至链表尾部还是添加至链表指定位置,都是通过移动相应的指针来实现的,也不用像ArrayList那样还要拷贝数组什么的,链表结构的维护就是这么简单,也不存在扩容操作什么的,艾玛真香!
是否是线程安全的?
也是非线程安全的!
-
size++;
和modCount++;
非原子操作的问题!
使用场景有哪些?
LinkedList底层是双向链表结构,基于此种数据结构,对元素的增删改操作的效率是很高的,但是对于查询就不一定了,因为底层实现先要查找待查元素在链表中的位置,就需要从头结点或尾结点遍历链表查找指定位置的元素。所以终上所述,LinkedList一般都是用在增删改操作比较频繁的操作中。
注意:
其实严格来讲,但凡需要查找元素在链表中的位置的操作,当链表的数据比较多的时候效率都不是很好,比如add(int index, E element)
、remove(int index)
、set(int index, E element)
、get(int index)
。【个人理解,欢迎指正】