坑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的坑。学习内容来自图灵--徐庶