簡述Arrays.asList警示

asList方法顧名思義:轉換爲集合,接收的是Object變更參數——Arrays.asList(Object... a)java

示例:數組

import java.util.Arrays;
import java.util.List;對象


public class Test47
{element

    public static void main(String[] args)
        throws Exception
    {
        int[] data = {5, 4, 3, 2, 1};
        List list = Arrays.asList();
        System.out.println("元素類型:" + list.get(0).getClass());
        System.out.println("先後是否相等:" + list.get(0).equals(data));
        /*
         * 8大基本數據類型不能做爲泛型參數,要想做爲泛型參數需使用對應的包裝類型 返回一個固定長度的列表如 源碼: public static <T> List<T>
         * asList(T... a) { return new ArrayList<>(a); }
         */
        System.out.println("列表中的元素數量是:" + list.size());
        /*
         * Arrays.asList方法轉換成list對象不可更改即add方法行不通 如 源碼Arrays建立了一個靜態私有內部類ArrayList,但並未實現add方法
         * 其父類源碼所示 public boolean add(E e) { add(size(), e); return true;} 
         * public void add(int index, E element)
         * { throw new UnsupportedOperationException(); }
         */
        list.add(6);
        System.out.println("提示報錯");
    }get

}源碼

執行結果:io

元素類型:class [I
Exception in thread "main" 先後是否相等:true
列表中的元素數量是:1
java.lang.UnsupportedOperationException
    at java.util.AbstractList.add(AbstractList.java:148)
    at java.util.AbstractList.add(AbstractList.java:108)
    at com.wxp.test.Test47.main(Test47.java:29)class

拓展源碼Arrays建立了一個靜態私有內部類ArrayList的相關方法thread

size:元素數量test

contains:是否包含某元素

replaceAll:集合裏所有替換

indexOf:獲取某一元素的下標

set:重置指定某一元素

get:得到指定元素

toArray:轉換爲數組,實現了數組的淺拷貝

參照來源:《編寫高質量代碼:改善java程序的151建議》

相關文章
相關標籤/搜索