LinkedList 是 Java 集合框架中的一个类,基于双向链表实现。它实现了 List 和 Deque 接口,提供了链表的数据结构。
底层结构
节点(Node):
每个节点包含三个部分:数据、指向前一个节点的引用、指向后一个节点的引用。
主要操作原理
添加元素:
通过调整节点的引用,在任意位置添加元素。
在头部或尾部添加时,直接调整相应的头尾引用。
删除元素:
通过调整前后节点的引用移除元素。
断开与目标节点的链接,不需要移动其他元素。
访问元素:
从头或尾开始遍历链表,直到找到指定索引的节点。
时间复杂度为 O(n)。
特点
高效插入和删除:
适合频繁的插入和删除操作。
插入和删除只需调整节点引用,时间复杂度为 O(1)。
有序性:
元素按插入顺序存储。
不适合随机访问:
由于需要遍历链表,随机访问性能较差。
双向链表:
每个节点包含对前一个和后一个节点的引用。
允许重复和 null:
可以包含重复元素和 null 值。
注意事项
内存消耗:
由于每个节点需要存储两个引用,内存开销较大。
非线程安全:
需要在多线程环境中手动同步。
由于LinkedList实现了了Deque接口,这里补充一些Deque的常用方法。
添加元素
addFirst(E e):在队列的开头插入元素。
addLast(E e):在队列的末尾添加元素。
offerFirst(E e):在队列的开头插入元素,返回是否成功。
offerLast(E e):在队列的末尾添加元素,返回是否成功。
移除元素
removeFirst():移除并返回队列的第一个元素。
removeLast():移除并返回队列的最后一个元素。
pollFirst():移除并返回队列的第一个元素,若为空返回 null。
pollLast():移除并返回队列的最后一个元素,若为空返回 null。
获取元素
getFirst():返回队列的第一个元素,不移除。
getLast():返回队列的最后一个元素,不移除。
peekFirst():返回队列的第一个元素,不移除,若为空返回 null。
peekLast():返回队列的最后一个元素,不移除,若为空返回 null。
这里写一下无返回值的几个方法
import java.util.LinkedList;
public class test {
public static void main(String[] args) {
LinkedList<String> a = new LinkedList<>();
a.add("abc");
a.addFirst("edc");
a.addLast("eee");
System.out.println(a);//[edc, abc, eee]
System.out.println(a.getFirst());//edc
System.out.println(a.getLast());//eee
a.removeFirst();//[abc, eee]
System.out.println(a);
a.removeLast();
System.out.println(a);//[abc]
}
}