List转数组的3种方法速度比较

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

}

最后的结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m2snqSot-1625036270612)(C:\Users\1\AppData\Roaming\Typora\typora-user-images\image-20210630144752506.png)]

1、new 一个Int[]+循环遍历列表时间:3ms
2、stream流+Lambda表达式时间:52ms
3、List的toArray()函数时间:5ms

实验结论:三种方法中方法1通过new int[]数组再遍历赋值的方式最快,同时也是代码量最大的;方法2通过Stream流先进行强制类型转换然后再转为int[]的方法是最慢的,但是其代码只需一行,非常简洁;方法3直接通过List的toArray()函数转换的速度也是很快的,只略慢于方法1,并且其代码量也只有一行,但是,该方法不能转换为基础类型,具有一定的限制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值