1. 程式人生 > 其它 >Java Arrays.asList()當引數為基本型別陣列易犯的錯誤

Java Arrays.asList()當引數為基本型別陣列易犯的錯誤

技術標籤:java學習java

專案場景:

今天刷LeetCode,用到了Arrays.asList()方法,但是由於沒報錯,所以一時不知錯在哪。

public class mytest {
    public static void main(String[] args) {
        char[] cary = "abcde".toCharArray();        //舉個例子
        Set<Character> set = new HashSet(Arrays.asList((cary)));
        System.out.println(set.size());
    }
}



/*結果
1
*/

問題描述:

我記得Arrays.asList()確實能吧陣列轉換為ArrayList()的啊。所以set.size()=5才對。然而等於1.


原因分析:

檢視Arrays.List()原始碼

@SafeVarargs
@SuppressWarnings("varargs")
public static <T> List<T> asList(T... a) {
    return new ArrayList<>(a);
}

一開始沒看出個所以然,但是在idea中,滑鼠指向T的時候

T是個繼承於Object的類,並非基本型別,所以char[]作為引數匯入事,T 為char[]。也就是Arrays.asList(傳入一個char[]) 返回的是ArrayList<char[]>型別。所以set中只有一個值。


解決方案:

知道原因就很簡單啦。多加點程式碼

建立一個Character[]陣列作為Arrays.asList()的引數

或者建立個ArrayList<Character> ,然後一個一個add()進去。