String[] arrs = String[]{"aaa","bbb","ccc","ddd"};
List<String> list = Arrays.asList(arrs);
list.add("eee");
踩坑1:java.lang.UnsupportedOperationException
发生问题的原因如下:
调用Arrays.asList()生产的List的add、remove方法时报异常,这是由Arrays.asList() 返回的是Arrays的内部类ArrayList, 而不是java.util.ArrayList。Arrays的内部类ArrayList和java.util.ArrayList都是继承AbstractList,remove、add等方法AbstractList中是默认throw UnsupportedOperationException而且不作任何操作。java.util.ArrayList重新了这些方法而Arrays的内部类ArrayList没有重新,所以会抛出异常。解决方法如下
解决
String[] arrs = String[]{"aaa","bbb","ccc","ddd"};
//由于数组是非动态的,不能进行动态的添加,所有先将它转成list,操作
List<String> list = ArrayList<>(Arrays.asList(arrs));
list.add("ee")
问题2:java.lang.Object cannot be cast to [Ljava.lang.String
String[] arrs = (String[])list.toArray();
解决:
String[] arrs = list.toArray(new String[list.size()]);
最终实现了,数组中动态添加,与相互转换问题!
String[] arrs = String[]{"aaa","bbb","ccc","ddd"};
//由于数组是非动态的,不能进行动态的添加,所有先将它转成list,操作
List<String> list = ArrayList<>(Arrays.asList(arrs));
list.add("ee")
//我们在将list转换成String[]数组
arrs = list.toArray(new String[list.size()]);
Systim.out.println(arrs);//["aaa","bbb","ccc","ddd"];
还有一种方式,使用stream转换为list
List<Integer> ids = Stream.of(110, 112, 113, 115).collect(Collectors.toList());