1.首先我們看看數組轉集合的方法。
數組轉集合使用Arrays.asList()方法。首先我們試試把數組轉換成集合後調用集合方法
public class Array2List {
public static void main(String[] args) {
String[] str = {"aaa", "bbb", "ccc"};
List<String> list = Arrays.asList(str);
list.add("ddd");
System.out.println(list);
System.out.println("list.get(1) = " + list.get(1));
// str[1] = "add";
// System.out.println("new list.get(1) = " + list.get(1));
for (String newStr : str) {
System.out.println(newStr + " ");
}
}
產生結果如下:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
at com.ruiMing.Array2List.main(Array2List.java:10)
說明轉換後的數據並不能用集合的方法。
現在我們去掉集合的add方法,改變一下數組內容:
public static void main(String[] args) {
String[] str = {"aaa", "bbb", "ccc"};
List<String> list = Arrays.asList(str);
// list.add("ddd");
System.out.println(list);
System.out.println("list.get(1) = " + list.get(1));
str[1] = "add";
System.out.println("new list.get(1) = " + list.get(1));
for (String newStr : str) {
System.out.println(newStr + " ");
}
}
輸出結果如下:
[aaa, bbb, ccc]
list.get(1) = bbb
new list.get(1) = add
aaa
add
ccc
發現用了轉換集合的方法後再改變數組內容,使用list.get方法得到的內容也隨之改變。
在阿里巴巴開發手冊上是這樣寫的:【強制】使用工具類 Arrays.asList()把數組轉換成集合時,不能使用其修改集合相關的方
法,它的 add/remove/clear 方法會拋出 UnsupportedOperationException 異常。
說明:asList 的返回對象是一個 Arrays 內部類,並沒有實現集合的修改方法。Arrays.asList
體現的是適配器模式,只是轉換接口,後臺的數據仍是數組。
String[] str = new String[] { "you", "wu" };
List list = Arrays.asList(str);
第一種情況:list.add("yangguanbao"); 運行時異常。
第二種情況:str[0] = "gujin"; 那麼 list.get(0)也會隨之修改。
我們由此明白,所謂數組轉集合,實際上還是數組形式存儲,改變數組內容也會影響到list。特別注意
要想變成集合,可以:
String[] str = {"aaa", "bbb", "ccc"};
List<String> list = new ArrayList<>(Arrays.asList(str));