情景
现在有个数组,比如:String[] array = new String[]{"1","2","3"};
我们想要往这个数组中添加或删除元素。
思路
我们知道,数组是没有add,remote这些method的。
所以我们需要将数组转换为list集合,list有这些功能啊,操作完之后,再将list转换为数组即可。没毛病!!
操作
public class test { public static void main(String[] args) { String[] array = new String[]{"1","2","3"}; List<String> list1 = Arrays.asList(array); // 我们想要的操作 list1.add("4"); list1.remove("1"); // 操作结束后,再转为数组 Object[] array2 = list1.toArray(); for(Object a: array2) { System.out.println(a); } } }
这段代码,看着没毛病。运行~~~
在list1.add("4"); 这一步就报错了。不支持这个操作。同样,remove也不支持咯。
原因
Arrays.asList(String[])这种方式只能转为Arrays$ArrayList类,Arrays$ArrayList和ArrayList都是继承AbstractList,AbstractList类是不操作remove,add等method的,所以Arrays$ArrayList 也就不支持这些方法,默认throw UnsupportedOperationExceptiony异常。而ArrayList重写了remove,add等method,所以可以使用这些方法。
修改
1 public class test { 2 public static void main(String[] args) { 3 String[] array = new String[]{"1","2","3"}; 4 List<String> list1 = Arrays.asList(array); 5 List<String> list2 = new ArrayList<String>(list1); 6 // 我们想要的操作 7 list2.add("4"); 8 list2.remove("1"); 9 // 操作结束后,再转为数组 10 Object[] array2 = list2.toArray(); 11 for(Object a: array2) { 12 System.out.println(a); 13 } 14 15 } 16 }
我们需要将Arrays$ArrayList类转换为ArrayList类,再来进行操作。结束之后,转为数组。查看结果
两个操作都成功了!