天天看点

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);