要求把數組轉換成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);