要求把数组转换成List,第一印象想到的就是利用Arrays工具类中的asList()方法,但是运行时报错
错误:
//这是我写的代码
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);