添加元素到列表Java

时间:2013-07-09 10:58:40

标签: java

为什么在将值分配给Arrays.asList

后,我无法将元素添加到List
List<Integer> sam = Arrays.asList(1,2,3,4);
sam.add(5);

for (Integer integer : sam)
{
  System.out.println(integer);
}

5 个答案:

答案 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)

As per docs

  

返回由指定数组支持的固定大小的列表。(对返回列表的更改“直写”到数组。)此方法充当基于数组和基于集合的桥梁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返回固定大小的列表视图,因此您无法使用列表添加元素。

无论如何,这里也回答了同样的问题:

Arrays.asList() doubt?