链表(LinkedList)是Java集合框架(Java Collections Framework)中的一部分,它实现了List
接口和Deque
接口,允许元素为空。LinkedList
是一个双向链表,每个节点都保存了其前一个和后一个元素的引用。这使得在链表的任何位置进行插入和删除操作都相对高效。
以下是LinkedList
的一些常见用法和示例代码:
import java.util.LinkedList;
public class LinkedListExample {
public static void main(String[] args) {
// 创建一个空的链表
LinkedList<String> list = new LinkedList<>();
// 向链表中添加元素
list.add("A");
list.add("B");
list.add("C");
// 打印链表的内容
System.out.println(list); // 输出: [A, B, C]
}
}
LinkedList
提供了在链表头部和尾部以及指定位置插入元素的方法。
// 在链表的头部插入元素
list.addFirst("First"); // 等同于 offerFirst("First")
// 在链表的尾部插入元素
list.addLast("Last"); // 等同于 offerLast("Last")
// 在指定位置插入元素
list.add(1, "Inserted"); // 在索引1的位置插入"Inserted"
可以从链表中删除头部、尾部或指定位置的元素。
// 删除链表的头部元素并返回它
String head = list.removeFirst(); // 等同于 pollFirst()
// 删除链表的尾部元素并返回它
String tail = list.removeLast(); // 等同于 pollLast()
// 删除指定位置的元素并返回它
String removedElement = list.remove(1); // 删除索引1的元素
可以使用索引来访问链表中的元素,但这并不是链表的优势所在,因为需要从头或尾开始遍历。
// 获取指定位置的元素(不删除)
String element = list.get(1); // 获取索引1的元素,不删除它
// 检查链表是否包含某个元素
boolean contains = list.contains("A"); // 如果链表包含"A",则返回true
可以使用迭代器或增强型for循环来遍历链表。
// 使用迭代器遍历链表
for (String item : list) {
System.out.println(item); // 打印每个元素
}
// 或者使用迭代器显式地遍历链表
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next()); // 打印每个元素
}
LinkedList
还提供了一些其他有用的方法,如获取链表的大小、清空链表等。
// 获取链表的大小(元素数量)
int size = list.size(); // 返回链表中的元素数量
// 清空链表中的所有元素
list.clear(); // 移除链表中的所有元素,使其变为空链表
这些示例代码涵盖了LinkedList
类中大多数常见方法的用法。请注意,LinkedList
是一个线程不安全的类,如果需要在多线程环境中使用,应该考虑使用外部同步或其他并发集合类。