Java List深度解析:add()与addAll()方法的高效使用指南
Java List的add()和addAll()方法详解
在本文中,您将深入学习Java中List接口的add()
和addAll()
方法。
Java List的add()方法
add()
方法用于向列表中添加元素。它主要有两种重载形式:
add(E e)
: 此方法将指定的元素添加到列表的末尾。由于List支持泛型,因此可以添加的元素类型在创建List时就已经确定。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()
方法用于将指定集合中的所有元素添加到列表中。该方法有两个重载形式:
addAll(Collection<? extends E> c)
: 此方法将给定集合c
中的所有元素附加到当前列表的末尾。元素的插入顺序取决于集合迭代器返回的顺序。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]
}
}
首先,这段代码创建了一个名为 primeNumbers
的 ArrayList
,并使用 addAll()
方法初始化它,使其包含元素 [2, 7, 11]
。然后,将该列表的内容输出到控制台。
接着,代码再次调用 addAll()
方法,但这次是在指定索引 1
处插入由 [3, 5]
组成的集合。这意味着 3
和 5
将被插入到当前列表的第二个位置(索引为1)。结果将是一个包含 [2, 3, 5, 7, 11]
的列表,并再次输出到控制台。
使用List的add()方法引发的UnsupportedOperationException
List的add()和addAll()方法:操作可选性与UnsupportedOperationException
在Java中,List
接口的add()
和addAll()
方法在文档中被标记为“可选操作”。这意味着某些List
的实现可能不支持这些添加元素的操作。当尝试对不支持添加操作的列表执行add()
方法时,会抛出UnsupportedOperationException
异常。
以下是两种常见的导致UnsupportedOperationException
的情况:
-
Arrays.asList()
:返回固定大小的列表Arrays.asList()
方法返回一个由指定数组支持的固定大小的列表。因此,任何尝试更改此列表大小的操作(例如添加或删除元素)都会抛出UnsupportedOperationException
异常。 -
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集合代码至关重要。