通义千问3-14B硬件选型:从消费级到专业级GPU对比
2026/1/15 1:17:39
LinkedList 是 Java 集合框架中java.util包下的一个实现类,它实现了List、Deque等接口,底层基于双向链表实现(JDK 1.6 及之前是循环链表,之后改为双向链表)。
简单来说:
O(1)(按索引增删需先遍历找节点,复杂度O(n))。O(n)(对比 ArrayList 的O(1))。Collections.synchronizedList(new LinkedList<>())。Deque接口,可作为队列(Queue)、双端队列(Deque)、栈(Stack)使用。下面是 LinkedList 最常用的增删改查、队列 / 栈相关操作,代码可直接运行:
import java.util.LinkedList; import java.util.Queue; import java.util.Deque; public class LinkedListDemo { public static void main(String[] args) { // 1. 创建 LinkedList 对象 LinkedList<String> list = new LinkedList<>(); // 2. 新增元素 list.add("Java"); // 尾部添加 list.addFirst("Python"); // 头部添加 list.addLast("C++"); // 尾部添加(等同于 add) list.add(2, "Go"); // 指定索引添加(索引从0开始) System.out.println("初始链表:" + list); // [Python, Java, Go, C++] // 3. 查询元素 String first = list.getFirst(); // 获取头部元素:Python String last = list.getLast(); // 获取尾部元素:C++ String index2 = list.get(2); // 获取索引2的元素:Go System.out.println("索引2的元素:" + index2); // 4. 修改元素 list.set(1, "JavaScript"); // 修改索引1的元素 System.out.println("修改后链表:" + list); // [Python, JavaScript, Go, C++] // 5. 删除元素 list.removeFirst(); // 删除头部元素 list.removeLast(); // 删除尾部元素 list.remove(0); // 删除索引0的元素 System.out.println("删除后链表:" + list); // [] // 6. 作为队列(FIFO)使用 Queue<String> queue = new LinkedList<>(); queue.offer("A"); // 入队 queue.offer("B"); System.out.println("队列出队:" + queue.poll()); // A(出队并删除) System.out.println("队列首元素:" + queue.peek()); // B(仅查看) // 7. 作为栈(LIFO)使用(推荐用Deque而非Stack) Deque<String> stack = new LinkedList<>(); stack.push("X"); // 入栈 stack.push("Y"); System.out.println("栈出栈:" + stack.pop()); // Y(出栈并删除) System.out.println("栈顶元素:" + stack.peek()); // X(仅查看) } }| 特性 | LinkedList | ArrayList |
|---|---|---|
| 底层结构 | 双向链表 | 动态数组 |
| 随机访问(get/set) | 慢(O (n)) | 快(O (1)) |
| 增删操作(非头尾) | 慢(需遍历找节点,O (n)) | 慢(需移动元素,O (n)) |
| 增删操作(头尾) | 快(O (1)) | 慢(可能扩容,O (n)) |
| 内存占用 | 高(每个节点存额外引用) | 低(连续存储,仅预留空间) |
| 适用场景 | 频繁增删头尾、队列 / 栈 | 频繁查询、少量增删 |