Java: For循环那些事
title: Java-for循环那些事
toc: true
date: 2019-05-21 10:28:44
categories: Java
tags:
- Tips
Java for循环里面的 i++ 与 ++i
在for循环里两者的作用是一样的
i++
for(int i=0; i<5; i++){
System.out.print(i + ",");
}
>> 0, 1, 2, 3, 4
++i
for(int i=0; i<5; ++i){
System.out.print(i + ",");
}
>> 0, 1, 2, 3, 4
工作原理
i++
{
System.out.print(i + ",");
i++;
}
++i
{
System.out.print(i + ",");
++i;
}
区别
在Java里面,i++ 需要开辟新的存储空间用于存储结果,++i 直接在原存储空间中存储结果。故 ++i 在 for 循环里面执行效率要高。 可以作为代码优化的一部分。
foreach 与 for循环的效率
首先测试数组
// 测试for循环
int[] A = new int[100000000];
long startTime = System.nanoTime();
int len = A.length;
int res = 0;
for(int i=0; i<len; i++){
res += A[i];
}
long endTime = System.nanoTime();
System.out.println("for循环: "+(endTime- startTime)); // 测试foreach
int[] A = new int[100000000];
long startTime = System.nanoTime();
int len = A.length;
int res = 0;
for(Integer i: A){
res += i;
}
long endTime = System.nanoTime();
System.out.println("foreach循环: "+(endTime- startTime));
结果
for循环: 37143324
forecah循环: 75450311
可见对于大数组采用for循环效率更高
再测试ArrayList
ArrayList<Integer> list = new ArrayList<>(30000000);
for(int i=0; i<30000000; i++){
list.add(i);
}
// 测试for循环
long startTime = System.nanoTime();
int size = list.size();
int res = 0;
for(int i=0; i<size; i++){
res += list.get(i);
}
long endTime = System.nanoTime();
System.out.println("for循环: "+(endTime- startTime)); // 测试foreach
long startTime = System.nanoTime();
int res = 0;
for(Integer i: list){
res += i;
}
long endTime = System.nanoTime();
System.out.println("foreach循环: "+(endTime- startTime));
结果
for循环: 39368248
forecah循环: 42177137
可见对于ArrayList仍然是采用for循环效率更高!
for循环小技巧
关于数组
循环嵌套采用小套大。原理跟复制几个大文件跟复制一堆小文件耗时一样。
测试
long startTime = System.nanoTime();
int res = 0;
// 大套小
for(int i=0; i<10000000; i++){
for(int j=0; j<100; j++){
res += i;
}
}
long endTime = System.nanoTime();
System.out.println("大套小: "+(endTime- startTime));
// 小套大
for(int i=0; i<100; i++){
for(int j=0; j<10000000; j++){
res += i;
}
}
long endTime = System.nanoTime();
System.out.println("小套大: "+(endTime- startTime));
结果
大套小: 57934223
小套大: 4918044
关于ArrayList
在循环时,首先把ArrayList长度size记录下来。
测试
ArrayList<Integer> list = new ArrayList<>(30000000);
for(int i=0; i<30000000; i++){
list.add(i);
}
long startTime = System.nanoTime();
//先把长度保存下来
int len = list.size();
int res = 0;
for(int i=0; i<len; i++){
res += list.get(i);
}
long endTime = System.nanoTime();
System.out.println("保存size(): "+(endTime- startTime));
//没有保存size()
for(int i=0; i<list.size(); i++){
res += list.get(i);
}
long endTime = System.nanoTime();
System.out.println("没有保存size(): "+(endTime- startTime));
结果
保存size(): 38973440
没有保存size(): 39486862
Java: For循环那些事的更多相关文章
- 第二周:Java For循环方法简介
1.for循环的作用 Java当中循环的意思就是让Java程序重复地执行某些语句.在程序设计时,常常需要处理大量的重复动作, 采用循环结构可以降低程序书写的长度和复杂度可使复杂问题简单化,提高程序的可 ...
- [Java基础]循环结构3
[Java基础]循环结构3 break 与 continue 中断循环... /** 文件路径:G:\JavaByHands\循环语句\ 文件名称:BreakTest.java 编写时间:2016/6 ...
- [java基础]循环结构2
[java基础]循环结构2 写了几个循环结构练习~记录一下~~ 1:99乘法表 /** 文件路径:G:\JavaByHands\循环语句\ 文件名称:GameForFor.java 编写时间:2016 ...
- [java基础]循环结构1
[java基础]循环结构1 循环结构:for循环,while循环,do_while循环在,增强型for循环 /** 文件路径:G:\JavaByHands\循环语句\ 文件名称:WhileTest.j ...
- Java中循环删除list中元素的方法总结
印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后在今天使用的时候发现报错了,然后去科普了一下,发现这是一个误区.下面我们来一起看一下. Java中循环遍 ...
- Java日志性能那些事(转)
在任何系统中,日志都是非常重要的组成部分,它是反映系统运行情况的重要依据,也是排查问题时的必要线索.绝大多数人都认可日志的重要性,但是又有多少人仔细想过该怎么打日志,日志对性能的影响究竟有多大呢?今天 ...
- java集合循环删除
java集合循环删除,java list集合操作,java循环.分享牛,分享牛原创.java集合删除方法. 2.6.1.第一种方式 list.add("1"); list.add( ...
- JAVA中循环删除list中元素的方法总结【转】
印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天在使用时发现报错了,然后去科普了一下,再然后发现这是一个误区.下面就来讲一讲..伸手党可直接跳至文末 ...
- Java for-each循环解惑
Java for-each循环解惑 2014/04/24 | 分类: 技术之外 | 0 条评论 | 标签: JAVA 分享到:21 本文由 ImportNew - liqing 翻译自 javarev ...
随机推荐
- react封装基于axios的API请求
一.最近做的一个后台管理项目,基于antd-pro做的,需要封装基于axios请求,便于开发,直接上代码. import axios from 'axios'; export const Method ...
- Tween(补间)动画
视图动画,也叫Tween(补间)动画可以在一个视图容器内执行一系列简单变换(位置.大小.旋转.透明度).譬如,如果你有一个TextView对象,您可以移动.旋转.缩放.透明度设置其文本,当然,如果它有 ...
- 006-top查看计算机信息
1.使用top命令基本信息 us:用户态使用的cpu时间比sy:系统态使用的cpu时间比ni:用做nice加权的进程分配的用户态cpu时间比id:空闲的cpu时间比wa:cpu等待磁盘写入完成时间hi ...
- 使用div 的 contenteditable属性,实现输入编辑,输入 "#" 出现下拉选择
文章原文:https://www.cnblogs.com/yalong/p/11883585.html 演示效果如下: 具体代码可以看 https://github.com/YalongYan/e ...
- 简单分析一下socket中的bind
[转自]守夜者 灵感来自于积累 的博客 [原文链接]http://www.cnblogs.com/nightwatcher/archive/2011/07/03/2096717.html在最开始接触b ...
- 用mongodump以及mongorestore来完成mongo的迁移任务
首先粘贴官网说明: 详细请见:https://docs.mongodb.com/manual/ 在实际操作中,一般只需用到 mongodump -h ip:port -d dbName -o path ...
- 【转载】android权限大全
1.android.permission.WRITE_USER_DICTIONARY 允许应用程序向用户词典中写入新词 2.android.permission.WRITE_SYNC_SETTINGS ...
- git stash save -a 遇到的坑 , 弹出匿藏错误
情景一: 用命令行的 : git stash save -u "描述" git stash save -a "描述" -u: 会把没有记录到的文件也保存下来(比 ...
- XML中不能识别&符号, 需要转义吗?
“&”在XML中是具有特殊含义的,是转义字符的前缀,如果要想用这个字符就需要转义.遇到“&”就替换成“&”就好了; xml所有转义符 和 & & 大于 ...
- 使用SecureCRT连接虚拟机中Linux系统 和 虚拟机网络配置
使用SecureCRT连接步骤:1.首先打开虚拟机,点击左上角的编辑,再点击虚拟网络编辑器(已经进行虚拟网络编辑的忽略此步骤,直接进行第二步) 点击VMnet8网络,点击更改设置,此步骤需要管理员权限 ...