數組轉換為集合 採用java中集合自帶的asList()方法就可以完成轉換了 特別註意: == 因為,Arrays.asList()方法轉換成的List集合類是java.util.Arrays.ArrayList下麵的,它是java.util.Arrays類中自己定義的一個內部類,沒有實現具體的ad ...
數組轉換為集合
採用java中集合自帶的asList()方法就可以完成轉換了
String[] array = new String[] {"zhu", "wen", "tao"};
// String數組轉List集合
List<String> mlist = Arrays.asList(array);
// 輸出List集合
for (int i = 0; i < mlist.size(); i++) {
System.out.println("mlist-->" + mlist.get(i));
}
特別註意:
==因為,Arrays.asList()方法轉換成的List集合類是java.util.Arrays.ArrayList下麵的,它是java.util.Arrays類中自己定義的一個內部類,沒有實現具體的add()以及remove()方法,直接使用父類AbstractList的方法,但是父類中add()以及remove()方法是拋出UnsupportedOperationException()異常的。
所以如果單純轉換成List集合是為了遍歷,則通過Arrays.asList()方法轉換之後就可以了,但是如果需要對List集合進行增刪改操作的,則需要自己重新新建一個List集合,把數據轉到新的集合中,進行後續操作==
解決方案:
1、運用ArrayList的構造方法是目前來說最完美的作法,代碼簡潔,效率高:
List<String> list = new ArrayList<String>(Arrays.asList(array));
List<String> list = new ArrayList<String>(Arrays.asList(array));
//ArrayList構造方法源碼
public ArrayList(Collection<? extends E> c) {
elementData = c.toArray();
size = elementData.length;
// c.toArray might (incorrectly) not return Object[] (see 6260652)
if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, size, Object[].class);
}
2、運用Collections的addAll方法也也是不錯的解決辦法
List<String> list = new ArrayList<String>(array.length);
Collections.addAll(list, array);
List集合轉換成數組
採用集合的toArray()方法直接把List集合轉換成數組,這裡需要註意,不能這樣寫:
String[] array = (String[]) mlist.toArray();
這樣寫的話,編譯運行時會報類型無法轉換java.lang.ClassCastException的錯誤,這是為何呢,這樣寫看起來沒有問題啊
因為java中的強制類型轉換是針對單個對象才有效果的,而List是多對象的集合,所以將整個List強制轉換是不行的
正確的寫法應該是這樣的
String[] array = mlist.toArray(new String[0]);
List<String> mlist = new ArrayList<>();
mlist.add("zhu");
mlist.add("wen");
mlist.add("tao");
// List轉成數組
String[] array = mlist.toArray(new String[0]);
// 輸出數組
for (int i = 0; i < array.length; i++) {
System.out.println("array--> " + array[i]);
}
參考
原文:https://blog.csdn.net/zhenwei1994/article/details/78783209