Java语言中,常用的循环语句有4种。这些循环是编写Java代码必然会涉及到的控制流语句,片段代码如下。
1.For
each 语句
这个循环式在Java5中引进的,优点是很简洁。
private List<Integer> list = new ArrayList<>();
for(Integer i : list){
// 业务逻辑
}
2. 使用list.size()作为状态
private List<Integer> list = new ArrayList<>();
for(int j = 0; j < list.size() ; j++){
//业务逻辑
}
3. 初始化本地变量size
private List<Integer> list = new ArrayList<>();
int size = list.size()
for(int j = 0; j < list.size() ; j++){
//
}
4. 初始化计时器的值
private List<Integer> list = new ArrayList<>();
for(int j = list.size(); j > size ; j--){
//业务逻辑
}
比较这4种方式的性能,请看下面的程序。
public class LoopPerformance {
private static List<Integer> list = new ArrayList<Integer>(1000000);
static {
for (int i = 0; i < 10000000; i++) {
list.add(i);
}
}
public void testLoopPerformance(){
long startTime;
long endTime;
//style 1
startTime = System.nanoTime();
for (Integer i : list) {
//
}
endTime = System.nanoTime();
System.out.println("For each loop :: " + (endTime - startTime) + " ms");
//style 2
startTime = System.nanoTime();
for (int j = 0; j < list.size(); j++) {
//
}
endTime = System.nanoTime();
System.out.println("Using collection.size() :: " + (endTime - startTime) + " ms");
//style 3
startTime = System.nanoTime();
int size = list.size();
for (int j = 0; j < size; j++) {
//
}
endTime = System.nanoTime();
System.out.println("Using [int size = list.size(); int j = 0; j < size ; j++] :: " + (endTime - startTime) + " ms");
//style 4
startTime = System.nanoTime();
for (int j = list.size(); j > 0; j--) {
//System.out.println(j);
}
endTime = System.nanoTime();
System.out.println("Using [int j = list.size(); j > 0 ; j--] :: " + (endTime - startTime) + " ms");
}
public static void main(String[] args) {
new LoopPerformance().testLoopPerformance();
}
}
输出结果:
For each loop :: 48459306 ms
Using collection.size() :: 13065838 ms
Using [int size = list.size(); int j = 0; j < size ; j++] :: 12495 ms
Using [int j = list.size(); j > 0 ; j--] :: 9371 ms
显然,style 1 时间消耗最大,随后是style2。而style 3 和tyle 4的性能差别不大,可以考虑这两者是一样的。为什么会有这样的结果呢?
style 3 和style 4它们都采用了collection集合的初始值,然后,在循环中用到。唯一的区别在于使用上,一个是作为状态比较,而另一个则作为变量的初始值。style 2使用size()作为循环判断的标准,每次作比较的时,它都会被调用一次。尽管JVM优化了内联调用以及其他优化,但是,多为大量的调用,必然会花费不必要的时间。需要知道,这样编码,在机器上执行的代码语句(字节码)更多。style
4 是最花费性能的,原因是它内部使用循环的迭代iterator 形式。创建interator和调用interator.get() 上花费很多的时间。
分享到:
相关推荐
1.4 算法的性能评价 1.4.1 时间复杂度 1.4.2 空间复杂度 1.5 一个算法实例 1.5.1 查找数字 1.5.2 创建项目 1.5.3 编译执行 1.6 Java程序的基本结构 1.6.1 类是一个基本单元 1.6.2 main方法 1.6.3 自定义方法 1.6.4 ...
超参调优有很多无聊的事情,比如给超参配置一堆值,给一堆日志文件命名,启动一堆进程,比较日志文件的结果等等,所以手动操作既费时又出错易于。 现有的一些自动超参数调优程序依赖于 Python,而老中易只依赖于字符...
学习深度学习可以通过掌握深度神经网络、卷积神经网络(CNN)和循环神经网络(RNN)等概念来实现。你可以学习深度学习框架如TensorFlow或PyTorch来实践深度学习算法。 数据处理和特征工程:了解如何处理和清洗数据、...
Java版水果管理系统源码 Forward This project is for Study. Android学习路线 初级工程师:阅读官方文档+练习官方Demo 技术要求 四大组件使用 ...中级工程师:写文章要独立思考和有技术深度;...了解主线程的消息循环模
初级java笔试题教学大纲 从 描述。 基本数据类型、算法和数据结构的介绍。 我们的重点是 Java 实现的应用程序和科学性能分析。 第一部分侧重于基本数据结构、排序和搜索。...Java,包括循环、数组、函数、递归和对象。
递归虽然精炼,但需要注意避免无限递归以及递归深度过深导致的性能问题。 掌握这些概念对于理解和编写程序至关重要,它们可以帮助你构建具有复杂逻辑的程序,并有效地解决问题。如果你想了解更多关于这些概念的信息...
递归虽然精炼,但需要注意避免无限递归以及递归深度过深导致的性能问题。 掌握这些概念对于理解和编写程序至关重要,它们可以帮助你构建具有复杂逻辑的程序,并有效地解决问题。如果你想了解更多关于这些概念的信息...
对于现阶段的Android开发而言,技术深度很大一部分就体现在对Android系统底层的理解上。只有理解了底层的运作,我们才能更全面的掌握应用的行为、解决更多疑难杂症、并针对性的进行性能优化。同时,还能触类旁通,往...
对于现阶段的Android开发而言,技术深度很大一部分就体现在对Android系统底层的理解上。只有理解了底层的运作,我们才能更全面的掌握应用的行为、解决更多疑难杂症、并针对性的进行性能优化。同时,还能触类旁通,往...
对于现阶段的Android开发而言,技术深度很大一部分就体现在对Android系统底层的理解上。只有理解了底层的运作,我们才能更全面的掌握应用的行为、解决更多疑难杂症、并针对性的进行性能优化。同时,还能触类旁通,往...
对于现阶段的Android开发而言,技术深度很大一部分就体现在对Android系统底层的理解上。只有理解了底层的运作,我们才能更全面的掌握应用的行为、解决更多疑难杂症、并针对性的进行性能优化。同时,还能触类旁通,往...
对于现阶段的Android开发而言,技术深度很大一部分就体现在对Android系统底层的理解上。只有理解了底层的运作,我们才能更全面的掌握应用的行为、解决更多疑难杂症、并针对性的进行性能优化。同时,还能触类旁通,往...
缺少深度学习算法框架 Mahout ⽀持的语⾔:java,scala ⽀持的⽂件系统:HDFS ⽀持的数据库:Hive,HBase ⽀持的算法:分类,聚类,回归,降维,协同过滤 优点: 1. 基于hadoop实现 2. 利⽤MapReduce计算引擎,提升...
图的遍历:深度优先、广度优先(A) 最小生成树算法(两个)及其特点(A) 拓扑排序(A) 关键路径算法(A) 最短路径算法(两个)(A,O :时间复杂度) 8. 查找表 查找的有关概念,ASL等 顺序查找(A,P) 熟练...
提供 Java运行性能,降低小而大量重复的类的开销. C. 行为模式 设计模式之 Command(命令) 什么是将行为封装,Command 是最好的说明. 设计模式之 Observer(观察者) 介绍如何使用 Java API 提供的现成 Observer ...
书中的算法以英语加伪代码的形式给出,只要有一点程序设计经验的人都能读懂,并可以用任何计算机语言(如C/C++和Java等)方便地实现。在书中,作者将算法的讨论集中在一些比较现代的例子上,它们来自分子生物学(如...
书中的算法以英语加伪代码的形式给出,只要有一点程序设计经验的人都能读懂,并可以用任何计算机语言(如C/C++和Java等)方便地实现。在书中,作者将算法的讨论集中在一些比较现代的例子上,它们来自分子生物学(如...
其二、技术层次深:如果期望进入IT服务或者产品公司(类似毕博、DELL、IBM等),Oracle技术能够帮助提高就业的深度。 其三、职业方向多:Oracle数据库管理方向、Oracle开发及系统架构方向、Oracle数据建模数据仓库等...