数组和列表的选择

来源:互联网 发布:如何做淘宝详情页 编辑:程序博客网 时间:2024/06/05 17:28

在Java中有很多方式来存储一系列数据,而且在操作上面比数组方便的多?但为什么我们还需要使用数组,而不是替代它呢?数组与其他种类的容器之间的区别有三个方面:效率、类型和保存基本类型的能力。在java中,数组是一种效率最高的存储和随机访问对象引用序列的方式。

       在项目设计中数组使用的越来越少了,而且它确实是没有List、Set这些集合使用方便,但是在某些方面数组还是存在一些优势的,例如:速度,而且集合类的底层也都是通过数组来实现的。

[java] view plain copy
  1. --------这是ArrayList的add()------  
  2.     public boolean add(E e) {  
  3.     ensureCapacity(size + 1);  // Increments modCount!!  
  4.     elementData[size++] = e;  
  5.     return true;  
  6.     }  

       下面利用数组和list来做一些操作比较。

       一、求和

[java] view plain copy
  1. Long time1 = System.currentTimeMillis();  
  2.         for(int i = 0 ; i < 100000000 ;i++){  
  3.             sum += arrays[i%10];  
  4.         }  
  5.         Long time2 = System.currentTimeMillis();  
  6.         System.out.println("数组求和所花费时间:" + (time2 - time1) + "毫秒");  
  7.         Long time3 = System.currentTimeMillis();  
  8.         for (int i = 0; i < 100000000; i++) {  
  9.             sum  += list.get(i%10);  
  10.         }  
  11.         Long time4 = System.currentTimeMillis();  
  12.         System.out.println("List求和所花费时间:" + (time4 - time3) + "毫秒");  
  13. --------------Output:  
  14. 数组求和所花费时间:696毫秒  
  15. List求和所花费时间:3498毫秒  

       从上面的时间消耗上面来说数组对于基本类型的求和计算的速度是集合的5倍左右。其实在list集合中,求和当中有一个致命的动作:list.get(i)。这个动作是进行拆箱动作,Integer对象通过intValue方法自动转换成一个int基本类型,在这里就产生了不必要的性能消耗。

       所以在性能要求较高的场景中请优先考虑数组。

原创粉丝点击