为什么在将值分配给 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));
Arrays.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();
}
}
返回由指定数组支持的固定大小的列表。(更改返回的列表“直写”到数组。)此方法与 Collection.toArray() 结合,充当基于数组的 API 和基于集合的 API 之间的桥梁。返回的列表是可序列化的并实现了 RandomAccess。
因此,在您创建之后,您无法在其中添加元素。
查看该方法的文档:
http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html#asList(T...)
Arrays.asList 方法返回一个固定大小的列表视图,因此您不能使用列表添加元素。
无论如何,这里回答了同样的问题:
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);
}