性能优化之list的size
来源:互联网 发布:手机淘宝开店没反应 编辑:程序博客网 时间:2024/05/29 14:16
【创建时间】2016/9/2
很多java规范中都会要求,遍历list、数组等的时候,要先取得长度,不要在每次循环的时候都调一遍list.size(),以提高性能。
然而实际能提高多少性能呢?我做了个小试验,来验证性能提升到底有没有效。
首先我创建了一个list,进行循环赋值,可以看到我循环了一千万次
2016-09-02 08:43:01.924
2016-09-02 08:43:01.954
2016-09-02 08:43:01.955
2016-09-02 08:43:01.958
可以很明显看出,没有采用先取长度的遍历方式,用了30毫秒;而采用了优化后的遍历方式,用了3毫秒。
考虑到一个系统中会有很多list遍历的情况,该优化方式确实对性能有提升。
很多java规范中都会要求,遍历list、数组等的时候,要先取得长度,不要在每次循环的时候都调一遍list.size(),以提高性能。
然而实际能提高多少性能呢?我做了个小试验,来验证性能提升到底有没有效。
首先我创建了一个list,进行循环赋值,可以看到我循环了一千万次
// 测试性能List<Integer> a = new ArrayList<Integer>();for (int i = 0; i < 10000000; i++) {a.add(i);}然后分别用两种方式遍历该数组,每次遍历前后都记录时间
System.out.println(DateUtil.getCurrentTime(DateUtil.FORMAT_FULL));for (int i = 0; i < a.size(); i++) {}System.out.println(DateUtil.getCurrentTime(DateUtil.FORMAT_FULL));System.out.println(DateUtil.getCurrentTime(DateUtil.FORMAT_FULL));int length = a.size();for (int i = 0; i < length; i++) {}System.out.println(DateUtil.getCurrentTime(DateUtil.FORMAT_FULL));控制台打印结果如下:
2016-09-02 08:43:01.924
2016-09-02 08:43:01.954
2016-09-02 08:43:01.955
2016-09-02 08:43:01.958
可以很明显看出,没有采用先取长度的遍历方式,用了30毫秒;而采用了优化后的遍历方式,用了3毫秒。
考虑到一个系统中会有很多list遍历的情况,该优化方式确实对性能有提升。
0 0
- 性能优化之list的size
- list的removeAll底层算法,性能,优化
- 基于size的优化
- Java List性能优化
- list.size()>0 && !list.isEmpty() 性能比较疑问
- 关于list.size()的误解
- freemarker取list的size
- android性能优化之context的优化
- java性能优化读书笔记之三《程序优化===集合优化(list)》
- 18hibernate hibernate的性能优化之session.clear()、1+N问题、list和iterate的区别
- java性能优化--List选择及优化
- android性能之List
- linux stl中list和windows stl list之size
- mysql性能优化之数据类型的选择
- MySQL之二十种性能优化的经验
- iOS开发之UITableView的性能优化
- 慢慢的走上性能优化之路
- 性能优化之Traceview工具的使用
- Material Design(3)(图特多)
- [HDU1556] Color the ball - 树状数组
- 类加载机制 读笔
- 36.activity返回携带数据
- maven项目 出现Specified web-root folder does not exist 的错误。
- 性能优化之list的size
- Android camera总回顾
- PAT A1082. Read Number in Chinese (25/21)
- UVA 524 素数环Prime Ring Problem (回溯法)
- 系统还原手动GHOST使用教程
- 我们究竟要用Docker做什么
- [HDU3584] Cube - 三维树状数组
- [LeetCode] Reconstruct Itinerary
- C/C++ 用宏定义实现简单泛型的功能