簡體   English   中英

添加元素到列表Java

[英]Adding Elements to List Java

為什么在將值分配給Arrays.asList后,我無法將元素添加到List

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返回固定大小的List。 不允許在此列表中添加或刪除元素,但是可以使用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。

因此,在創建之后,您無法在其中添加元素。

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方法返回固定大小的列表視圖,因此您無法使用列表添加元素。

無論如何,這里回答了同樣的問題:

Arrays.asList()有疑問嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM