Java List深度解析:add()与addAll()方法的高效使用指南

Java List的add()和addAll()方法详解

在本文中,您将深入学习Java中List接口的add()addAll()方法。

Java List的add()方法

add()方法用于向列表中添加元素。它主要有两种重载形式:

  1. add(E e): 此方法将指定的元素添加到列表的末尾。由于List支持泛型,因此可以添加的元素类型在创建List时就已经确定。
  2. add(int index, E element): 此方法在列表中指定的索引位置插入元素。插入后,原先在该索引位置及之后的所有元素都会向右移动一位。如果给定的索引超出当前列表的有效范围(即小于0或大于列表大小),该方法将抛出IndexOutOfBoundsException异常。

List add()方法示例

package com.scdev.examples;

import java.util.ArrayList;
import java.util.List;

public class ListAddExamples {

	public static void main(String[] args) {

		List<String> vowels = new ArrayList<>();

		vowels.add("A"); // [A]
		vowels.add("E"); // [A, E]
		vowels.add("U"); // [A, E, U]

		System.out.println(vowels); // 输出: [A, E, U]

		vowels.add(2, "I"); // [A, E, I, U]
		vowels.add(3, "O"); // [A, E, I, O, U]

		System.out.println(vowels); // 输出: [A, E, I, O, U]
	}
}

上述代码首先会向vowels列表中依次添加“A”、“E”和“U”,此时列表内容为[A, E, U],并将其输出到控制台。

接着,代码会在索引为2的位置插入“I”,使得列表变为[A, E, I, U]。然后,在索引为3的位置插入“O”,最终列表变为[A, E, I, O, U]。最后,将更新后的列表内容输出到屏幕。

Java List的addAll()方法

Java List的addAll()方法详解

addAll() 方法用于将指定集合中的所有元素添加到列表中。该方法有两个重载形式:

  1. addAll(Collection<? extends E> c): 此方法将给定集合 c 中的所有元素附加到当前列表的末尾。元素的插入顺序取决于集合迭代器返回的顺序。
  2. addAll(int index, Collection<? extends E> c): 使用此方法可以将集合 c 中的元素从列表的指定索引 index 处插入。插入时,列表中位于该索引及其之后的所有现有元素都将向右移动,为新元素腾出空间。

以下是 List addAll() 方法的示例:

package com.scdev.examples;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ListAddAllExamples {

	public static void main(String[] args) {

		List<Integer> primeNumbers = new ArrayList<>();

		primeNumbers.addAll(Arrays.asList(2, 7, 11));

		System.out.println(primeNumbers); // [2, 7, 11]

		primeNumbers.addAll(1, Arrays.asList(3, 5));

		System.out.println(primeNumbers); // [2, 3, 5, 7, 11]
	}
}

首先,这段代码创建了一个名为 primeNumbersArrayList,并使用 addAll() 方法初始化它,使其包含元素 [2, 7, 11]。然后,将该列表的内容输出到控制台。

接着,代码再次调用 addAll() 方法,但这次是在指定索引 1 处插入由 [3, 5] 组成的集合。这意味着 35 将被插入到当前列表的第二个位置(索引为1)。结果将是一个包含 [2, 3, 5, 7, 11] 的列表,并再次输出到控制台。

使用List的add()方法引发的UnsupportedOperationException

List的add()和addAll()方法:操作可选性与UnsupportedOperationException

在Java中,List接口的add()addAll()方法在文档中被标记为“可选操作”。这意味着某些List的实现可能不支持这些添加元素的操作。当尝试对不支持添加操作的列表执行add()方法时,会抛出UnsupportedOperationException异常。

以下是两种常见的导致UnsupportedOperationException的情况:

  1. Arrays.asList():返回固定大小的列表

    Arrays.asList()方法返回一个由指定数组支持的固定大小的列表。因此,任何尝试更改此列表大小的操作(例如添加或删除元素)都会抛出UnsupportedOperationException异常。

  2. Collections.unmodifiableList(List l):返回不可修改的视图

    Collections.unmodifiableList()方法返回给定列表的不可修改视图。这意味着你不能通过这个视图来修改原始列表。因此,对这个不可修改的视图执行add()操作会抛出UnsupportedOperationException异常。

示例一:在固定大小的列表上使用add操作引发UnsupportedOperationException

以下示例展示了在由Arrays.asList()创建的固定大小列表上执行添加操作时如何引发UnsupportedOperationException

jshell> List<Integer> ints = Arrays.asList(1, 2, 3);
ints ==> [1, 2, 3]

jshell> ints.add(4);
|  Exception java.lang.UnsupportedOperationException
|        at AbstractList.add (AbstractList.java:153)
|        at AbstractList.add (AbstractList.java:111)
|        at (#4:1)

首先,这段代码创建了一个固定大小的列表[1, 2, 3]。然后,它尝试向该列表添加元素4。结果,抛出了一个UnsupportedOperationException异常,明确指出该操作不被支持。

示例二:对给定列表的不可修改视图执行add操作引发UnsupportedOperationException

以下示例展示了对由Collections.unmodifiableList()创建的不可修改视图执行添加操作时如何引发UnsupportedOperationException

jshell> List<String> strs = new ArrayList<>();
strs ==> []

jshell> strs.add("A");
$6 ==> true

jshell> List<String> strs1 = Collections.unmodifiableList(strs);
strs1 ==> [A]

jshell> strs1.add("B");
|  Exception java.lang.UnsupportedOperationException
|        at Collections$UnmodifiableCollection.add (Collections.java:1058)
|        at (#8:1)

首先,此代码将字符串“A”添加到一个ArrayList中。接下来,它创建了该列表的一个不可修改视图strs1。然后,尝试通过strs1向列表中添加字符串“B”。这将导致抛出UnsupportedOperationException异常,因为strs1是一个不可修改的视图。

结论

通过本文,您深入了解了Java List接口的add()addAll()方法,特别是它们的可选性以及在何种情况下会抛出UnsupportedOperationException。理解这些概念对于编写健壮的Java集合代码至关重要。

推荐阅读:

参考资料:

bannerAds