坑1:不能对Arrays.asList返回的list进行增删操作
java
/**
* 坑1:不能对Arrays.asList返回的list进行增删操作
* @param args
*/
public static void main1(String[] args) {
String[] arr = new String[]{"a", "b", "c"};
List<String> list = Arrays.asList(arr);
// 集合元素不能新增
try {
list.add("s");
} catch (Exception e) {
System.out.println("不能新增, class: " + e.getClass() + " errorMssg: " + e.getMessage());
}
try {
// 集合元素不能删除
list.remove("a");
} catch (Exception e) {
System.out.println("不能删除, case: " + e.getClass() + " errorMssg:" + e.getMessage());
}
// 可以修改集合元素
list.set(0, "s");
System.out.println("修改成功!");
}
测试
坑2:会把集合整个作为对象存储
java
/**
* 坑2:会把集合整个作为对象存储
* @param args
*/
public static List main2(String[] args) {
int[] arr = new int[]{1, 2, 3};
List list = Arrays.asList(arr);
return list;
}
测试
输出数组对象
针对这一现象,只需要将int转为封装类型即可
java
/**
* 坑2之填坑法
*/
public static List main2_1(String[] args) {
Integer[] arr = new Integer[]{1, 2, 3};
List list = Arrays.asList(arr);
return list;
}
坑3:修改元素,会同时修改原集合的元素
java
/**
* 坑3:修改元素,会同时修改原集合的元素
* @param args
*/
public static void main3(String[] args) {
String[] arr = new String[]{"a", "b", "c"};
List<String> list = Arrays.asList(arr);
list.set(0, "s");
for (String s : arr) {
System.out.println(s);
}
}
测试
改变原数组对象
正确写法
java
/**
* 对坑3的填坑法
*/
public static void main3_1(String[] args) {
String[] arr = new String[]{"a", "b", "c"};
List<String> list = new ArrayList<>(Arrays.asList(arr));
list.set(0, "s");
for (String s : arr) {
System.out.println(s);
}
}
测试
注:测试Arrays.asList的坑。学习内容来自图灵--徐庶