LinkedList基于双向链表实现,支持高效插入删除和双向遍历,适用于栈、队列及浏览器历史等场景,但随机访问性能较差,需注意避免频繁get操作和线程安全问题。
Java中的LinkedList类本身就基于双向链表实现,因此无需手动构建底层结构即可直接使用其
高效的插入、删除和双向遍历能力。它实现了List和Deque接口,既能当作列表使用,也能作为队列或双端队列操作。
LinkedList内部每个节点包含三个部分:前驱指针(prev)、数据元素(item)和后继指针(next)。这种结构支持从任意方向遍历,前后节点相互引用,形成双向连接。
由于是链式存储,LinkedList在频繁增删操作的场景下性能优于ArrayList,但随机访问效率较低,因为需要从头或尾逐步查找目标位置。
以下是LinkedList中关键的操作方法及其用途:
利用LinkedList的双向特性,适合用于以下场景:
addFirst()和removeFirst()模拟栈;用addLast()和removeFirst()实现FIFO队列addLast()追加访问页面,用removeLast()回退ListIterator实现前后移动LinkedListlist = new LinkedList<>(); list.add("A"); list.addFirst("B"); // 结果: [B, A] list.addLast("C"); // 结果: [B, A, C] System.out.println(list.getFirst()); // 输出 B System.out.println(list.getLast()); // 输出 C list.removeFirst(); // 移除 B
虽然LinkedList天然支持双向链表操作,但在使用时应注意以下几点:
get(index)进行随机访问,时间复杂度为O(n)