Arrays.asList詳解和示例

注意

(1)該方法適用於對象型數據的數組(String、Integer…)

(2)該方法不建議使用於基本數據類型的數組(byte,short,int,long,float,double,boolean)

(3)該方法將數組與List列表鏈接起來:當更新其一個時,另一個自動更新

(4)不支持add()、remove()、clear()等方法

(5)此方法得到的List長度是不可變的

(6)asList返回的是java.util.Arrays.ArrayList,而不是java.util

傳遞的數組必須是對象數組,而不是基本類型

public class Demo {
    public static void main(String[] args) {
        int[] myArray = { 1, 2, 3 };
        List myList = Arrays.asList(myArray);
        System.out.println("myList.size():" + myList.size());
        System.out.println("myList.get(0):"+ myList.get(0));

        int [] array=(int[]) myList.get(0);
        System.out.print("array:");
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i]+",");
        }
        System.out.println();
        System.out.println(myList.get(1));

    }
}

輸出結果

myList.size():1
myList.get(0):[I@1b6d3586
array:1,2,3,
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
	at java.util.Arrays$ArrayList.get(Arrays.java:3841)
	at fking.Demo.main(Demo.java:26)

不支持add()、remove()、clear()等方法

public class Demo1 {
    public static void main(String[] args) {
        List myList = Arrays.asList(1, 2, 3);
//        myList.add(4);//運行時報錯:UnsupportedOperationException
//        myList.remove(1);//運行時報錯:UnsupportedOperationException
//        myList.clear();//運行時報錯:UnsupportedOperationException

    }
}

這三個分別解除註釋輸出結果

Exception in thread "main" java.lang.UnsupportedOperationException

asList返回的是java.util.Arrays.ArrayList,而不是java.util

public class Demo2 {
    public static void main(String[] args) {
        List myList = Arrays.asList(1, 2, 3);
        System.out.println(myList.getClass());//class java.util.Arrays$ArrayList
    }
}

輸出結果

class java.util.Arrays$ArrayList

幾種將數組轉換爲ArrayList

public class Demo3 {
    public static void main(String[] args) {
        //方法一
        List list = new ArrayList<String>(Arrays.asList("a", "b", "c"));

        //方法二使用collect
        Integer [] myArray = { 1, 2, 3 };
        List list2 = Arrays.stream(myArray).collect(Collectors.toList());
        //基本類型也可以實現轉換(依賴boxed的裝箱操作)
        int [] myArray2 = { 1, 2, 3 };
        List list3 = Arrays.stream(myArray2).boxed().collect(Collectors.toList());

        //方法三
        // 需要導入google guava工具包
        //<dependency>
        //    <groupId>com.google.guava</groupId>
        //    <artifactId>guava</artifactId>
        //    <version>18.0</version>
        //</dependency>

        String[] aStringArray =  new String[]{"a", "b", "c"};
        //不可變數組
        List<String> list4 = ImmutableList.of("string", "elements");  // from varargs
        List<String> list5 = ImmutableList.copyOf(aStringArray);      // from array

        List<String> aStringCollection  = new ArrayList<>();
        aStringCollection.add("a");
        aStringCollection.add("b");
        aStringCollection.add("c");
        //可變數組
        List<String> list6 = Lists.newArrayList(aStringCollection);    // from collection
        List<String> list7 = Lists.newArrayList(aStringArray);               // from array
        List<String> list8 = Lists.newArrayList("or", "string", "elements"); // from varargs

        //方法四
        // 需要導入Apache Commons Collections工具包
        //<dependency>
        //    <groupId>org.apache.commons</groupId>
        //    <artifactId>commons-collections4</artifactId>
        //    <version>4.4</version>
        //</dependency>
        List<String> list9 = new ArrayList<>();
        CollectionUtils.addAll(list9, aStringArray);
    }
}

總結

傳遞的數組必須是對象數組,而不是基本類型

如果只是用來遍歷,就用Arrays.asList()

如果要添加或刪除元素,則選擇new一個java.util.ArrayList

如果大家對java架構相關感興趣,可以關注下面公衆號,會持續更新java基礎面試題, netty, spring boot,spring cloud等系列文章,一系列乾貨隨時送達, 超神之路從此展開, BTAJ不再是夢想!

架構殿堂

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章