什么是 Java 的 LinkedList?
LinkedList
是 Java 集合框架中的一个类,位于 java.util
包中。它实现了 List
接口,并且是一个双向链表结构,可以高效地进行插入和删除操作。
主要特点
双向链表:每个节点包含指向前一个节点和后一个节点的引用。
动态大小:链表的长度可以根据需要动态变化。
非同步:LinkedList
不是线程安全的,如果多个线程同时访问一个 LinkedList
实例,需要手动进行同步处理。
构造方法
LinkedList
提供了两个主要构造方法:
-
默认构造方法:
LinkedList<E> list = new LinkedList<>();
-
带集合参数的构造方法:
LinkedList<E> list = new LinkedList<>(Collection<? extends E> c);
主要方法
-
添加元素:
add(E e)
: 在列表末尾添加元素。addFirst(E e)
: 在列表开头添加元素。addLast(E e)
: 在列表末尾添加元素(等同于add(E e)
)。add(int index, E element)
: 在指定位置添加元素。
list.add("element"); list.addFirst("firstElement"); list.addLast("lastElement"); list.add(1, "secondElement");
-
获取元素:
get(int index)
: 获取指定位置的元素。getFirst()
: 获取第一个元素。getLast()
: 获取最后一个元素。
String firstElement = list.getFirst(); String lastElement = list.getLast(); String secondElement = list.get(1);
-
删除元素:
remove()
: 删除并返回第一个元素。removeFirst()
: 删除并返回第一个元素(等同于remove()
)。removeLast()
: 删除并返回最后一个元素。remove(int index)
: 删除并返回指定位置的元素。
list.remove(); list.removeFirst(); list.removeLast(); list.remove(1);
-
其他方法:
size()
: 返回链表的元素个数。clear()
: 清空链表。contains(Object o)
: 判断链表是否包含指定元素。isEmpty()
: 判断链表是否为空。toArray()
: 将链表转换为数组。
int size = list.size(); list.clear(); boolean containsElement = list.contains("element"); boolean isEmpty = list.isEmpty(); Object[] array = list.toArray();
优点:
- 动态大小,可以高效地进行插入和删除操作。
- 实现了双向链表,可以双向遍历。
缺点:
- 由于节点存储了指向前后节点的引用,内存开销较大。
- 不能随机访问,需要遍历来找到指定位置的元素,时间复杂度为 O(n)。
使用场景
- 需要频繁插入和删除操作:例如实现队列和栈。
- 需要动态调整大小:链表可以根据需要动态增加或减少大小。
- 需要双向遍历:例如实现双向迭代器。
示例代码
下面是一个简单的示例,展示了如何使用 LinkedList
:
import java.util.LinkedList;
public class LinkedListExample {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
// 添加元素
list.add("Apple");
list.add("Banana");
list.addFirst("Orange");
list.addLast("Grapes");
// 获取元素
System.out.println("First Element: " + list.getFirst());
System.out.println("Last Element: " + list.getLast());
// 删除元素
list.removeFirst();
list.removeLast();
// 遍历链表
for (String element : list) {
System.out.println("Element: " + element);
}
}
}
LinkedList
是 Java 集合框架中一个强大的类,适用于需要频繁插入和删除操作的场景。虽然它的随机访问性能不如数组,但它在动态调整大小和双向遍历方面表现出色。理解并掌握 LinkedList
的使用,对提升 Java 编程能力非常有帮助。