Arrays.asList () 不可添加或刪除元素的緣由

Java中獎數組轉換爲List<T>容器有一個很方便的方法 Arrays.asList(T ... a),我經過此方法給容器進行了賦值操做,接着對其進行 添加元素,卻發現會拋出一個(java.lang.UnsupportedOperationException)異常。java

看了一下源碼:數組

public static <T> List<T> asList(T... a) {
    return new ArrayList<T>(a);
    }

  定位到 ArrayList 內中,發現其實Arrays 的內部類,而且繼承了AbstractList 類(abstract 類), 但並無覆寫 add() 方法,而是直接繼承的。 查看 AbstractList 源碼發現,其不少方法都要求在子類中進行覆寫的,若是隻繼承的話,那麼調用這些方法就會拋出一個異常。spa

// AbstractList 中實現的 add 方法
public boolean add(E e) {
    add(size(), e);
    return true;
    }

public void add(int index, E element) {
    throw new UnsupportedOperationException();
    }

如上,若是 在子類中單單是繼承的話,調用add 方法就會拋出異常

  結論: 經過Arrays.asList(T ... a) 方法初始化List 容器,該容器的長度是不可改變的。因此若是你要是想在你的容器中添加或者刪除元素的話,仍是使用 LinkedList () 【快插入 ,快刪除】 或者 ArrayList() 【快查詢】。code

相關文章
相關標籤/搜索