List转数组的3种方法速度比较
条件:对100w个数进行ArrayList转为nums[]/Integers[]
分别采用的方法
1、new一个Int[]+循环遍历列表
2、stream流+Lambda表达式mapToInt(k->k)
3、List的toArray()函数(只能转为Integer数组,若想转Int数组,只能参考上述两种方法)
具体代码实现
public class Test {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
//列表转数组的速度实验,用100w个数进行实验
Random random =new Random(1000);
Long preTime;
Long behindTime;
for(int i=0;i<1000000;i++){
list.add(random.nextInt());
}
//1.数组进行转换
preTime = System.currentTimeMillis();
int[] nums1= new int[list.size()];
for (int i = 0; i < list.size(); i++) {
nums1[i] = list.get(i);
}
behindTime = System.currentTimeMillis();
System.out.println("1、new 一个Int[]+循环遍历列表时间:"+(behindTime-preTime));
//2.使用Stream流
preTime = System.currentTimeMillis();
int[] nums2 = list.stream().mapToInt(k->k).toArray();
behindTime = System.currentTimeMillis();
System.out.println("2、stream流+Lambda表达式时间:"+(behindTime-preTime));
//3.使用List本身的toArray()函数
preTime = System.currentTimeMillis();
Integer[] nums3 = list.toArray(new Integer[list.size()]);
behindTime = System.currentTimeMillis();
System.out.println("3、List的toArray()函数时间:"+(behindTime-preTime));
}
}
最后的结果:
1、new 一个Int[]+循环遍历列表时间:3ms
2、stream流+Lambda表达式时间:52ms
3、List的toArray()函数时间:5ms
实验结论:三种方法中方法1通过new int[]数组再遍历赋值的方式最快,同时也是代码量最大的;方法2通过Stream流先进行强制类型转换然后再转为int[]的方法是最慢的,但是其代码只需一行,非常简洁;方法3直接通过List的toArray()函数转换的速度也是很快的,只略慢于方法1,并且其代码量也只有一行,但是,该方法不能转换为基础类型,具有一定的限制。