关于数组和List的互相转换,大家都是耳熟能详了,毕竟是经典八股文之一。
但是这里还是再次强调一些事项吧
数组转List
经典八股文,脱口而出的答案就是Arrays.asList()。
但是我不推荐,两个理由:
①对于数组的类型有要求。
这也是为什么在网上搜数组转List的示例都是如:String[] strings = {“aa”,“bb”,“cc”}
这种了。如果用int这种基本类型的数组呢:
答案是不行。必须用Integer[],Double[]这种装箱后的类型,或者说必须引用类型。
如果是方法限定了传的参数数组是基本类型,如 int[] ,就完全不能用Arrays.asList()。我刷算法题的时候就特别烦这限制。所以忘记这种转换方法吧,坑。
②Arrays.asList()的缺陷
使用Arrays.asList()转换为List后,只能够进行查询和修改,不能够增加和删除,如果使用list.add(),将报如下错:
太鸡肋了,如果是新手写的程序,这问题可能会被携带上线,造成生产事故的。
报错原因:
Arrays.asList(strArray)返回值是java.util.Arrays类中一个私有静态内部类java.util.Arrays.ArrayList,它并非java.util.ArrayList类。java.util.Arrays.ArrayList类具有 set(),get(),contains()等方法,但是不具有添加add()或删除remove()方法,所以调用add()方法会报错。
推荐的写法:
使用Java8的stream流,一行代码转换:
List<String> strings = Stream.of(strings).collect(Collectors.toList());
当然,这种写法也是需要是引用类型。int[] 这种是不行的,这就只能乖乖写for循环了。
好处就是这种代码是可以进行增删改查的,不至于会由于疏忽导致出现bug。
List转数组
经典八股文,脱口而出的答案就是list.toArray()。
真是这样吗?是的:
Integer[] arr = new Integer[list.size()];
list.toArray(arr);
这样也是一样限定了是引用类型,也就是必须Integer[],Double[]这种.
对int[],double[]这些基本数据类型,还是乖乖写for循环吧。
如果有误,谢请指出