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));
}
}

浙公网安备 33010602011771号