java 數組Array和集合List轉換千萬要注意 Arrays.asList

1.首先我們看看數組轉集合的方法。

數組轉集合使用Arrays.asList()方法。首先我們試試把數組轉換成集合後調用集合方法

public class Array2List {
    public static void main(String[] args) {
        String[] str = {"aaa", "bbb", "ccc"};
        List<String> list = Arrays.asList(str);
        list.add("ddd");
        System.out.println(list);
        System.out.println("list.get(1) = " + list.get(1));
//        str[1] = "add";
//        System.out.println("new list.get(1) = " + list.get(1));
        for (String newStr : str) {
            System.out.println(newStr  + " ");
        }
    }

產生結果如下:

Exception in thread "main" java.lang.UnsupportedOperationException
	at java.util.AbstractList.add(AbstractList.java:148)
	at java.util.AbstractList.add(AbstractList.java:108)
	at com.ruiMing.Array2List.main(Array2List.java:10)

 說明轉換後的數據並不能用集合的方法。

現在我們去掉集合的add方法,改變一下數組內容:

    public static void main(String[] args) {
        String[] str = {"aaa", "bbb", "ccc"};
        List<String> list = Arrays.asList(str);
//        list.add("ddd");
        System.out.println(list);
        System.out.println("list.get(1) = " + list.get(1));
        str[1] = "add";
        System.out.println("new list.get(1) = " + list.get(1));
        for (String newStr : str) {
            System.out.println(newStr  + " ");
        }
    }

輸出結果如下:

[aaa, bbb, ccc]
list.get(1) = bbb
new list.get(1) = add
aaa 
add 
ccc 

 發現用了轉換集合的方法後再改變數組內容,使用list.get方法得到的內容也隨之改變。

在阿里巴巴開發手冊上是這樣寫的:【強制】使用工具類 Arrays.asList()把數組轉換成集合時,不能使用其修改集合相關的方
法,它的 add/remove/clear 方法會拋出 UnsupportedOperationException 異常。
說明:asList 的返回對象是一個 Arrays 內部類,並沒有實現集合的修改方法。Arrays.asList
體現的是適配器模式,只是轉換接口,後臺的數據仍是數組。
 String[] str = new String[] { "you", "wu" };
 List list = Arrays.asList(str);
第一種情況:list.add("yangguanbao"); 運行時異常。
第二種情況:str[0] = "gujin"; 那麼 list.get(0)也會隨之修改。

我們由此明白,所謂數組轉集合,實際上還是數組形式存儲,改變數組內容也會影響到list。特別注意

要想變成集合,可以:

        String[] str = {"aaa", "bbb", "ccc"};
        List<String> list = new ArrayList<>(Arrays.asList(str));

 

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