【35】数组和List性能比较

本文通过对比int数组、Integer数组及List的求和性能,实测在2亿数据规模下,jdk1.8环境中三者的性能差异微小。实验结果显示,int数组和Integer数组的求和时间均在100毫秒内,而int与List的性能差异也仅为几十毫秒。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class Test {

    private static int count = 200000000;

    public static void main(String[] args){
        int[] datas = new int[count];
//        List<Integer> datasList = new ArrayList<>(count);
        Integer[] datas2 = new Integer[count];
        for(int i=0;i<count;i++){
            datas[i] = 0;
//            datasList.add(0);
            datas2[i] = 0;
        }

        Long start = System.currentTimeMillis();
        sum(datas);
        Long start1 = System.currentTimeMillis();
//        sum(datasList);
//        Long start2 = System.currentTimeMillis();
        sum(datas2);
        Long start3 = System.currentTimeMillis();

        System.out.println(start1-start);
//        System.out.println(start2-start1);
        System.out.println(start3-start1);
    }

    // 对数组求和
    public static int sum(int[] datas) {
        int sum = 0;
        for (int i = 0; i < datas.length; i++) {
            sum += datas[i]; // 1
        }
        return sum;
    }

    // 对列表求和
    public static int sum(List<Integer> datas) {
        int sum = 0;
        for (int i = 0; i < datas.size(); i++) {
            sum += datas.get(i); // 2
        }
        return sum;
    }

    // 对数组求和
    public static int sum(Integer[] datas) {
        int sum = 0;
        for (int i = 0; i < datas.length; i++) {
            sum += datas[i]; // 1
        }
        return sum;
    }
}

/**
 *   int 数组和Integer数组,在2亿数字下, jdk1.8都在100毫秒以下
 *   但是int和List在2亿数字下,jdk1.8也只是相差几十毫秒,性能问题几乎可以忽略不及
 *   之前看过博客说int和List的性能差别较大,是因为int --> Integer 装箱操作  和Integer --> int的拆箱操作比较浪费时间,亲测在1.8下,如上,性能问题可以忽略
 */
数组List在遍历上有一些不同,主要体现在语法灵活性上。以下是一些主要的区别: 1. **语法不同**: - **数组遍历**:可以使用传统的for循环或增强型for循环(for-each)。 ```java int[] array = {1, 2, 3, 4, 5}; // 传统for循环 for (int i = 0; i < array.length; i++) { System.out.println(array[i]); } // 增强型for循环 for (int num : array) { System.out.println(num); } ``` - **List遍历**:除了传统的for循环增强型for循环外,还可以使用Iterator或ListIterator。 ```java List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); // 传统for循环 for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } // 增强型for循环 for (int num : list) { System.out.println(num); } // 使用Iterator Iterator<Integer> iterator = list.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } ``` 2. **灵活性不同**: - **数组**:大小固定,一旦创建后无法更改其大小。 - **List**:大小可变,可以动态添加或删除元素。 3. **性能差异**: - **数组**:在某些情况下,数组的遍历速度可能比List快,因为它在内存中是连续存储的。 - **List**:由于List是动态数组,遍历速度可能略慢于数组,但提供了更多的操作方法。 4. **操作方法**: - **数组**:提供的基本操作方法较少,主要通过索引访问元素。 - **List**:提供了丰富的方法,如add, remove, contains等,操作更加灵活。 总结来说,数组List在遍历上各有优缺点,选择使用哪种数据结构取决于具体的需求使用场景。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值