Java 关于list.toArray()方法的进一步说明

经典场景(同时也是高频出错场景):
很多时候 我们想把list< Integer >转化成int[] 或者把int[]转化成list.但是这其中因为原始类型和引用类型的问题。
我们把list< Integer >转化成int[]
第一个坑:list.toArray()函数不会改变list 而是返回Object[] arr,所以我们需要新键一个数组来承接。
第二个坑:不能用int[]来承接Object[] 会出现类型转换的错误。
所以如果真的想最终转化成int[] 只能遍历了(也可以用jdk8中的intStream 具体怎么写见附录)
注意:如果我们想把list< String>转化成String[]的话 直接list.toArray()就行了。

但是特么奇葩的是
List< int[]> 可以用这种方法转化成int[][]
我真的是佛了

List<int[]> list = ....
list.toArray(new int[list.size()][] ==>this will return int[][]

附录:
1

int[] arr1 = list1.stream().mapToInt(Integer::valueOf).toArray();
想要转换成int[]类型,就得先转成IntStream。
这里就通过mapToInt()把Stream<Integer>调用Integer::valueOf来转成IntStream
而IntStream中默认toArray()转成int[]

2 测试代码如下:

import java.util.*;
public class Main
{
	public static void main(String[] args) {
	    int a = 1;
	    Integer[] b = new Integer[]{1,2};
	    List<int[]> c = new ArrayList<>();
	    c.add(new int[]{1, 2});
	    c.add(new int[]{3, 4});
	    int[][] d = c.toArray(new int[c.size()][]);
	    HashMap<Integer, Integer> map = new HashMap<>();
	    for (int[] e: d) {
	        System.out.println(Arrays.toString(e));
	    }
	    
	    List<Integer> f = new ArrayList<>();
	    f.add(1);
	    f.add(1);
	    int[] g = f.toArray(new int[f.size()]);
	    System.out.println(Arrays.toString(g));
	}
}
posted @ 2020-12-17 00:53  EvanMeetTheWorld  阅读(446)  评论(0)    收藏  举报