为什么在将值分配给Arrays.asList
后,我无法将元素添加到ListList<Integer> sam = Arrays.asList(1,2,3,4);
sam.add(5);
for (Integer integer : sam)
{
System.out.println(integer);
}
答案 0 :(得分:13)
Arrays.asList(1,2,3,4)
在数组上创建“列表视图”,其大小无法更改。这样我们就可以通过List
接口使用和访问数组。
如果您想要一个可以添加值但仍然使用方便Arrays.asList(..)
的列表,只需执行以下操作:
List<Integer> sam = new ArrayList<>(Arrays.asList(1,2,3,4));
答案 1 :(得分:6)
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();
}
}
答案 2 :(得分:2)
返回由指定数组支持的固定大小的列表。(对返回列表的更改“直写”到数组。)此方法充当基于数组和基于集合的桥梁API,与Collection.toArray()结合使用。返回的列表是可序列化的,并实现RandomAccess。
因此,在创建之后,您无法在其中添加元素。
答案 3 :(得分:0)
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);
}
答案 4 :(得分:0)
查看该方法的文档:
http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html#asList(T...)
方法Arrays.asList返回固定大小的列表视图,因此您无法使用列表添加元素。
无论如何,这里也回答了同样的问题: