List,Array 互相转化的方式
对于Array转List
- 利用循环直接转
int[] nums1 = {2, 3, 5, 6, 8, 9, 71, 89};
List<Integer> list = new ArrayList<>();// 转化
for (int i : nums1) {
list.add(i);
}
- Arrays.asList(T...a)
观察以下代码
int[] nums1 = {2, 3, 5, 6, 8, 9, 71, 89};
List<int[]> list = Arrays.asList(nums1);
Integer[] nums = {2, 3, 5, 6, 8, 9, 71, 89};
List<Integer> integers = Arrays.asList(nums);// 转化
我们发现,int返回的是对象是List<int[]>,而包装类型返回的是List<Integer>,很明显,我们想要的结果是第二种方式实现,可以看出包装类型的可以正确将数组转化为List,而基本数据类型不能,因为对于Arrays.asList(T...a)方法,传入的参数是(T...a),可以把他理解成数组,num1就是数组的0位置。
int[] nums1 = {2, 3, 5, 6, 8, 9, 71, 89};
int[] nums2 = {2, 3, 5, 6, 8, 9, 71, 89};
List<int[]> list = Arrays.asList(nums1,nums2);// 转化
可以看到nums被当成了第二个位置
- JDK1.8 的Stream流实现
Integer [] myArray = { 1, 2, 3 };
List myList = Arrays.stream(myArray).collect(Collectors.toList());// 转化
//基本类型也可以实现转换(依赖boxed的装箱操作)
int [] myArray2 = { 1, 2, 3 };
List myList = Arrays.stream(myArray2).boxed().collect(Collectors.toList());// 转化
- Collections.addAll( )方法
Integer[] nums = {2, 3, 5, 6, 8, 9, 71, 89};
ArrayList<Integer> list1 = new ArrayList<>();
Collections.addAll(list1,nums);// 转化
对于List转Array
- toArray() 和 toArray(T [] a)
toArray()不加参数,会转化为一个Object对象的数组,在使用中基本无用
Integer[] nums = {2, 3, 5, 6, 8, 9, 71, 89};
List<Integer> list = Arrays.asList(nums);
Object[] array1 = list.toArray();// 转化
toArray(T [] a),可以解决这个问题
第一种写法,这个参数里需要传入你指定的数据类型,注意,这里的类型同样是需要包装类型的,否则就会报错
Integer[] nums = {2, 3, 5, 6, 8, 9, 71, 89};
List<Integer> list = Arrays.asList(nums);
Integer[] array1 = list.toArray(new Integer[0]);// 转化
对于传入包装类型数组的大小,可以是0,也可以是list的大小,也可以是list.size()+1,不过,当你传入的大小超过list的大小是,转化后的数组,多余的部分就为null
Integer[] nums = {2, 3, 5, 6, 8, 9, 71, 89};
List<Integer> list = Arrays.asList(nums);
Integer[] array = list.toArray(new Integer[list.size()+1]); // 转化
Arrays.stream(array).forEach(System.out::println);
大于List的长度为null
- JDK1.8 的Stream流实现
用法基本和上面一样
Integer[] nums = {2, 3, 5, 6, 8, 9, 71, 89};
List<Integer> list = Arrays.asList(nums);
Object[] array = list.stream().toArray(); // 转化
Integer[] array1 = list.stream().toArray(Integer[]::new);// 转化