美文网首页
60.性能考虑,优选数组

60.性能考虑,优选数组

作者: ggr | 来源:发表于2018-04-11 16:16 被阅读0次

阅读本文章你将会知道:
1)数组和List的性能差异,为什么数组性能就高了?
2)Java的基本类型的拆装箱,基本类型的拆装箱是怎样的一个过程?

Java在实际的系统开发中用的越来越少,我们通常只有在阅读一些源码的时候才会遇到,在java中确实没有List,Set,Map这些集合类用起来方便,但是在基本类型的处理方面,数组还是有很大的优势的,而且集合类得到底层也是通过数组类实现的,比如有一个数据集求和的问题:

public class Client {

    public static void main(String[] args) throws Exception {

        int[] arr = new int[10000000];
        ArrayList<Integer> list = new ArrayList<Integer>(10000000);
        for(int i = 0;i<10000000;i++){
            arr[i]=i;
            list.add(i);
        }

        /**
         * 计算数组所有元素的和所消耗的时间
         */
        long start = System.currentTimeMillis();
        int sum = 0;
        for(int i = 0;i<arr.length;i++){
            sum+=arr[i];
        }
        long end = System.currentTimeMillis();
        System.out.println("数组时间消耗:"+(end-start)+"毫秒");
        /**
         * 计算List所有元素的和所消耗的时间
         */
        long start1 = System.currentTimeMillis();
        int sum1 = 0;
        for(int i = 0;i<list.size();i++){
            sum1+=list.get(i);
        }
        long end1 = System.currentTimeMillis();
        System.out.println("List时间消耗:"+(end1-start1)+"毫秒");
    }
}

运行结果:

数组时间消耗:7毫秒
List时间消耗:24毫秒

对比运行结果就会发现数组的性能基本上是集合的3倍。那么究竟是什么导致的出这种性能差异呢?
原来,基本类型的数组进行运算时是直接运算的,但是包装类型涉及到拆装箱问题,每次初始化的时候,数组直接赋值便可,但是List则需要进行基本类型的装箱,然后再添加到List,而且List还要间歇性扩容,虽然有常量池的存在,但是对于大于127的整型,List初始化的时候还要在堆区上创建(10000000-127)个对象,然后运算的时候还要把这写对象拆箱为基本类型再计算。所以效率会比数组低。

相关文章

  • 60.性能考虑,优选数组

    阅读本文章你将会知道:1)数组和List的性能差异,为什么数组性能就高了?2)Java的基本类型的拆装箱,基本类型...

  • 性能考虑,数组是首选

    **一、分析 **数组在实际的系统开发中使用的越来越少,我们通常只有在阅读一些开源项目时才会看到它们的身影,在Ja...

  • 扁平数据结构转Tree、递归等方法

    一维数组转成树结构,如下所示 1.不考虑性能实现,递归遍历查找 2.不用递归,也能搞定 3.最优性能 https:...

  • 性能考虑

    // 性能考虑 // OC 的每次方法的调用,都是在方法列表中进行遍历,也可能进入派发流程 // Swift 是直...

  • angular中ng-repeat使用笔记

    当items是一个简单数组时,如果数组中有重复数据,会报错.这是因为:出于性能考虑(可能还有其他因素),ng-re...

  • JVM参数及调优

    调优基本概念 在调整JVM性能时,通常有三个组件需要考虑: 堆大小调整 垃圾收集器调整 JIT编译器 大多数调优选...

  • 60. 搜索插入位置

    60. 搜索插入位置 描述 笔记 数据 评测 给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果...

  • iOS性能考虑

    在 WWDC 14 的 Keynote 上,Swift 相比于其他语言的速度优势被特别进行了强调。但是这种速度优势...

  • reduce实现多个实用的数组方法

    使用reduce实现数组自身的以及其他实用的方法。此处不考虑性能,仅仅通过reduce去实现一些方法以体现redu...

  • JS遍历方法性能比较

    考虑游览器版本,内核优化,数据会有偏差;各个循环适用条件场景,优缺点,性能消耗 创建一个10w条数据的数组,遍历该...

网友评论

      本文标题:60.性能考虑,优选数组

      本文链接:https://www.haomeiwen.com/subject/dhmvfftx.html