Java LinkedList add() 方法

Java LinkedList Java LinkedList


LinkedList 类提供了多个 add() 方法的重载版本,用于向列表中添加元素。

1、boolean add(E e)

这是最基本的添加方法,将指定元素追加到列表末尾。

实例

LinkedList<String> list = new LinkedList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");

方法特点

  • 总是返回 true(因为 LinkedList 允许重复元素)
  • 时间复杂度为 O(1)
  • 等效于 addLast() 方法

2、void add(int index, E element)

在列表的指定位置插入指定元素。

实例

LinkedList<String> list = new LinkedList<>();
list.add("Apple");
list.add("Banana");
list.add(1, "Orange"); // 在索引1处插入

方法特点

  • 如果索引等于列表大小,则相当于 add(E e)
  • 需要遍历到指定位置,平均时间复杂度为 O(n)
  • 可能抛出 IndexOutOfBoundsException

3、boolean addAll(Collection<? extends E> c)

将指定集合中的所有元素按迭代器返回的顺序追加到列表末尾。

实例

LinkedList<String> fruits = new LinkedList<>();
fruits.add("Apple");
fruits.add("Banana");

List<String> moreFruits = Arrays.asList("Orange", "Grape");
fruits.addAll(moreFruits);

方法特点

  • 返回 true 如果列表因调用而改变
  • 时间复杂度为 O(m),m 是参数集合的大小

4、boolean addAll(int index, Collection<? extends E> c)

从指定位置开始,将指定集合中的所有元素插入此列表。

实例

LinkedList<String> fruits = new LinkedList<>();
fruits.add("Apple");
fruits.add("Banana");

List<String> moreFruits = Arrays.asList("Orange", "Grape");
fruits.addAll(1, moreFruits); // 在索引1处插入集合

方法特点

  • 需要先遍历到指定位置
  • 时间复杂度为 O(n + m),n 是列表大小,m 是集合大小

与其他方法的比较

add() vs addLast()

  • add(E e)addLast(E e) 完全等效
  • 都用于在列表末尾添加元素

add() vs offer()

  • add(E e) 在容量受限的队列中可能抛出异常
  • offer(E e) 在容量受限的队列中会返回 false 而不是抛出异常

add() vs push()

  • push(E e) 实际上调用了 addFirst(E e)
  • 将元素添加到列表开头而非末尾

性能考虑

添加操作的效率

  • 末尾添加:O(1) 时间复杂度
  • 开头添加:O(1) 时间复杂度(使用 addFirst())
  • 中间添加:O(n) 时间复杂度(需要遍历到指定位置)

与 ArrayList 的比较

操作 LinkedList ArrayList
末尾添加 O(1) O(1) 平摊
开头添加 O(1) O(n)
中间添加 O(n) O(n)
随机访问 O(n) O(1)

实际应用示例

创建待办事项列表

实例

LinkedList<String> todoList = new LinkedList<>();

// 添加任务
todoList.add("Buy groceries");
todoList.addFirst("Check emails"); // 高优先级任务
todoList.add(1, "Call mom"); // 中等优先级

System.out.println(todoList);
// 输出: [Check emails, Call mom, Buy groceries]

实现简单队列

实例

LinkedList<String> queue = new LinkedList<>();

// 入队操作
queue.add("First");
queue.add("Second");
queue.add("Third");

// 出队操作
while(!queue.isEmpty()) {
    System.out.println(queue.removeFirst());
}

合并两个列表

实例

LinkedList<String> list1 = new LinkedList<>(Arrays.asList("A", "B", "C"));
LinkedList<String> list2 = new LinkedList<>(Arrays.asList("D", "E", "F"));

list1.addAll(list2);
System.out.println(list1); // 输出: [A, B, C, D, E, F]

注意事项

  1. 线程安全:LinkedList 不是线程安全的,多线程环境下需要外部同步
  2. 空元素:允许添加 null 元素
  3. 索引检查:使用带索引的 add 方法时要注意边界条件
  4. 并发修改:在使用迭代器时修改列表会抛出 ConcurrentModificationException

Java LinkedList Java LinkedList