天天看點

Arrays.asList()方法報錯:Exception in thread “main“ java.lang.UnsupportedOperationException

要求把數組轉換成List,第一印象想到的就是利用Arrays工具類中的asList()方法,但是運作時報錯

錯誤:

Arrays.asList()方法報錯:Exception in thread “main“ java.lang.UnsupportedOperationException
//這是我寫的代碼
String[] strs = {"12345","67891","12347809933","98765432102","67891","12347809933"};
List<String> list = new LinkedList<>();
list = Arrays.asList(strs);
list.add("");//報錯
list.remove("67891");//報錯
System.out.println(list);
           

 問題原因:

    檢視源代碼:

  • //AbstractList類中的源碼
    * @throws UnsupportedOperationException if the {@code add} operation
    *         is not supported by this list      

        譯:不支援List對它進行操作

  • //Arrays類中的源碼
    public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }
    private static class ArrayList<E> extends AbstractList<E>
           implements RandomAccess, java.io.Serializable      

       可以看出傳回的ArrayList其實是Arrays類中的一個私有化的内部類,是以不是平常了解的List集合

問題解決:把數組轉換成List

//方法一:利用foreach循環,進行指派
String[] strs = {"12345","67891","12347809933","98765432102","67891","12347809933"};
List<String> list = new LinkedList<>();
for(String s:strs){
    if(!list.contains(s)){
         list.add(s);
    }
}
//方法二:
String[] strs = {"12345","67891","12347809933","98765432102","67891","12347809933"};
List<String> list = new LinkedList<>(Arrays.asList(strs));
list.add("dhj");
System.out.println("list:"+list);