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