什么是 LinkedList
- LinkedList 是 List 接口的一个具体实现类,它基于双向链表数据结构来实现元素的存储和操作
主要特点
- 双向链表:
- LinkedList 使用双向链表作为底层数据结构,每个节点(Node)包含对前一个和后一个节点的引用。这使得在 LinkedList 中插入和删除元素的效率很高,因为只需要调整节点的引用即可
- 无需扩容:
- 与 ArrayList 不同,LinkedList 不需要预先分配固定大小的空间,因为它不是基于数组实现的,它根据需要动态分配内存
- 插入和删除操作效率高:
- 在 LinkedList 中,插入和删除元素的效率很高,特别是在列表的开头或中间插入、删除元素时。这是因为只需要调整相邻节点的引用,不涉及数组的移动操作
- 随机访问效率较低:
- 与 ArrayList 不同,LinkedList 的随机访问效率较低。访问第 n 个元素需要从头或尾部开始遍历,直到找到对应的节点。因此,如果需要频繁进行随机访问操作,ArrayList 更适合。
- 适合频繁插入删除的场景:
- 因为 LinkedList 的插入和删除操作效率高,所以它特别适合在需要频繁插入和删除元素的场景中使用。
LinkedList 的使用
import java.util.LinkedList;
public class LinkedListExample {
public static void main(String[] args) {
// 创建一个 LinkedList
List<String> linkedList = new LinkedList<String>();
// 添加元素到链表尾部
linkedList.add("Apple");
linkedList.add("Banana");
linkedList.add("Orange");
// 在链表头部添加元素
linkedList.addFirst("Grapes");
// 在链表指定位置插入元素
linkedList.add(2, "Mango");
// 遍历链表并输出元素
for (String fruit : linkedList) {
System.out.println("Fruit: " + fruit);
}
// 删除链表头部元素
linkedList.removeFirst();
// 删除链表尾部元素
linkedList.removeLast();
// 删除指定位置的元素
linkedList.remove(1);
// 再次遍历链表并输出元素
System.out.println("After removal:");
for (String fruit : linkedList) {
System.out.println("Fruit: " + fruit);
}
}
}
- LinkedList 的灵活性和高效的插入、删除操作,适合于需要频繁修改集合内容的场景;但在需要频繁随机访问元素的情况下,建议选择 ArrayList