为什么我在把值从Arrays.asList赋给列表后无法添加元素
List<Integer> sam = Arrays.asList(1,2,3,4);
sam.add(5);
for (Integer integer : sam)
{
System.out.println(integer);
}
为什么我在把值从Arrays.asList赋给列表后无法添加元素
List<Integer> sam = Arrays.asList(1,2,3,4);
sam.add(5);
for (Integer integer : sam)
{
System.out.println(integer);
}
Arrays.asList(1,2,3,4)
创建了一个固定大小的数组的“列表视图”。这样,我们可以通过List
接口使用和访问数组。
如果想要一个可以添加值的列表,但仍然使用方便的Arrays.asList(..)
,只需执行以下操作:
List<Integer> sam = new ArrayList<>(Arrays.asList(1,2,3,4));
List
接口中的所有方法都可用,但有些方法有限制:例如 add
方法无法使用 - 因为它仍然是一个数组。 - Andreas DolkArrays.asList
返回一个固定大小的列表。不允许向此列表添加或删除元素,但可以使用 set
方法修改列表中的元素。
public static <T> List<T> asList(T... a) {
return new ArrayList<T>(a); // this is not java.util.ArrayList
}
private static class ArrayList<E> extends AbstractList<E>
implements RandomAccess, java.io.Serializable {
ArrayList(E[] array) {
if (array==null)
throw new NullPointerException();
a = array;
}
public E set(int index, E element) {
E oldValue = a[index];
a[index] = element;
return oldValue;
}
// add() and remove() methods are inherited from AbstractList
}
public abstract class AbstractList<E> extends AbstractCollection<E>
implements List<E> {
public E remove(int index) {
throw new UnsupportedOperationException();
}
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
}
返回由指定数组支持的固定大小的列表。 (对返回的列表所做的更改“写入”到数组中。)此方法充当基于数组和基于集合的API之间的桥梁,与Collection.toArray()结合使用。返回的列表是可序列化的并实现随机访问。
因此,在创建后,您无法向其中添加元素。
asList(T... a)
返回由指定数组支持的固定大小列表。
List<Integer> sam = new ArrayList<Integer>();
sam.addAll(Arrays.asList(1,2,3,4));
sam.add(5);
for (Integer integer : sam)
{
System.out.println(integer);
}
查看该方法的文档:
http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html#asList(T...)
Arrays.asList方法返回的是一个固定大小的列表视图,因此您无法使用该列表添加元素。
无论如何,相同的问题在这里得到了解答: