天天看點

JAVA 常見問題彙總(補充ing)集合

集合

Arrays

Arrays.asList

Arrays.asList是将對象數組或單個對象轉為List,下面是ArrayList的代碼

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

可以看到是将數組轉為ArrayList,但是需要注意的是asList方法傳回的ArrayList不是java.util的ArrayList,而是Arrays自己實作的一個List

可以看下Arrays的ArrayList具體的實作

JAVA 常見問題彙總(補充ing)集合

裡面并沒有實作add和remove方法,是以如果使用add和remove方法就會抛出UnsupportedOperationException異常

同樣的問題在調用java.util包下的Collections.emptyList方法時也會出現
Exception in thread "main" java.lang.UnsupportedOperationException
	at java.util.AbstractList.add(AbstractList.java:148)
	at java.util.AbstractList.add(AbstractList.java:108)
           

可以用下面的方法解決問題

public static void main(String[] args) {
        String[] str = {"李四", "王五"};
        
        // 1. 使用Collections.addAll方法替換Arrays.asList
        ArrayList<Object> arrayList = new ArrayList<>();
        Collections.addAll(arrayList, str);
        arrayList.add("趙大");
        System.out.println("Arrays.toString(arrayList.toArray()) = " + Arrays.toString(arrayList.toArray()));
        // 2.使用Arrays.asList方法後再轉為java.util包下的ArrayList避免add(異常)
        List<String> list = new ArrayList<>(Arrays.asList(str));
        list.add("趙大");
        System.out.println("Arrays.toString(list.toArray()) = " + Arrays.toString(list.toArray()));

    }