JAVA集合IV-LinkedList
1.LinkedList底层源码
(1)LinkedList类源码(继承、实现)
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable
{
(2)LinkedList类继承和接口图
2.LinkedList底层操作机制
(1)说明
- LinkedList底层实现了双向链表和双端队列特点
- 可以添加任意元素(元素可以重复),包括空元素null
- 线程不安全,没有实现同步
(2)底层操作机制
- LinkedList底层维护了一个双向链表
- LinkedList中维护了两个属性first和last,分别指向首节点和尾节点
- 每个节点(Node对象),里面又维护了一个prev、next、item三个属性,其中通过prev指向前一个,通过next指向后一个节点。最终实现双向链表
- 所有LinkedList的元素的添加和删除,不是通过数组完成的,相对来说效率高
上图可以看到,LinkedList链表节点定义。
下图为双向链表的示意图:
3.LinkedList与ArrayList比较
4.LinkedList部分方法测试
(1)LinkedList的增删改查
增加元素方法(双向链表和双端队列特点):
删除元素方法(双向链表和双端队列特点):
修改元素方法(双向链表和双端队列特点):
查询元素方法(双向链表和双端队列特点):
(2)简单代码
在增删改查中,如果使用的是双向链表的操作(增、删、改、查),就按照双向链表的方式进行处理;如果使用的是双端队列的操作(增、删、改、查),就按照双端队列的方式进行处理。(因为LinkedList同时具备双端队列和双向链表的特点)。
package Collection.linkedList;
import java.util.LinkedList;
/**
* @author rql
* @date 2022/4/28 - 21:16
*/
public class LinkedListTest {
public static void main(String[] args) {
LinkedList linkedList = new LinkedList<>();
linkedList.add(1);
linkedList.add(2);
linkedList.add(3);
System.out.println(linkedList);
/*
* add添加源码分析
* (1)调用linkLast(e)从链表尾部进行添加
* public boolean add(E e) {
linkLast(e);
return true;
}
(2)创建新的节点,并将新结点放在链表的后面(这里会先判断链表是否为空)
void linkLast(E e) {
final Node<E> l = last;
final Node<E> newNode = new Node<>(l, e, null);
last = newNode;
if (l == null)
first = newNode;
else
l.next = newNode;
size++;
modCount++;
}
、、
*
*
*
*
* */
//修改set方法
linkedList.set(1,4);
//删除方法remove
linkedList.remove();
linkedList.getFirst();
}
}