zoukankan      html  css  js  c++  java
  • Android的性能优化

    ArrayList和Vector

    ArrayList和Vector都是内部以数组实现的List,它们两唯一的区别就是对多线程的支持,ArrayList是线程不安全的,而Vector内部对大多数方法都做了同步,是线程安全的,既然是线程安全的,所以性能方面肯定不如ArrayList了(当然想法肯定是对的),不过这需要看哪方面了,ArrayList在add、get、remove等操作效率肯定是高于Vector的,而在内存方面,Vector却比ArrayList表现的更好。

    实现RandomAccess接口的集合使用for遍历

    先谈谈List集合的遍历方式,有三种:foreach、iterator、for。 
    而在开发中一般需要遍历时首选肯定是foreach了,因为它效率高,这个观点没错,不过需要分场合了。 
    下面是我用这三种方式测试遍历有100w条数据的ArrayList集合:

     long start = System.currentTimeMillis();
     for (int i = 0; i < size; i++) {
                data.get(i);
     }
     long end = System.currentTimeMillis();
     Log.v("log","for花费:"+(end-start));
    
     start = System.currentTimeMillis();
     for (Integer integer : data) {
    
     }
     end = System.currentTimeMillis();
     Log.v("log","foreach花费:"+(end-start));
    
     Iterator<Integer> iterator = data.iterator();
     start = System.currentTimeMillis();
     while (iterator.hasNext()){
        iterator.next();
     }
     end = System.currentTimeMillis();
     Log.v("log","iterator花费:"+(end-start));
    11-19 09:11:44.276 1418-1418/? V/log: for花费:30
    11-19 09:11:44.380 1418-1418/? V/log: foreach花费:105
    11-19 09:11:44.476 1418-1418/? V/log: iterator花费:95

    因为ArrayList和Vector集合内部实现由数组实现,所以随机访问的速度是很快的。对于可以进行随机访问的List,JDK为它们实现了RandomAccess接口,表示支持快速随机访问。

    结论:对于实现了RandomAccess接口的集合,for效率表现的最好。


    而在遍历有1w条数据的LinkedList集合时:

    11-19 09:11:44.276 1418-1418/? V/log: for花费:351
    11-19 09:11:44.380 1418-1418/? V/log: foreach花费:2
    11-19 09:11:44.476 1418-1418/? V/log: iterator花费:4

    则foreach表现最佳。

    结论:对LinkedList等以链表实现的集合遍历时使用foreach或者iterator性能最佳,因为foreach的实现就是通过iterator实现的。 


    我们可以这样判断该List遍历用哪种方式:

    if (list instanceof RandomAccess){
          for (int i = 0; i < list.size(); i++) {}
    } else {
          Iterator<?> iterator = list.iterator();
          while (iterator.hasNext()){
               iterator.next();
          }
    }
  • 相关阅读:
    ajax专题
    luogu P1346 电车 最短路
    luogu P1462 通往奥格瑞玛的道路 最短路
    luogu P1328 生活大爆炸版石头剪刀布
    luogu P1315 联合权值 枚举
    luogu P1156 垃圾陷阱 背包问题
    luogu P1217 回文质数 枚举
    luogu P3650 滑雪课程设计 枚举
    luogu1209 修理牛棚 贪心
    luogu P1223 排队接水 贪心
  • 原文地址:https://www.cnblogs.com/kelina2mark/p/5091898.html
Copyright © 2011-2022 走看看