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 ...
随机推荐
- CentOS / RHEL 配置yum源
CentOS / RHEL 配置yum源 */--> CentOS / RHEL 配置yum源 Table of Contents 1. 前言 2. 关于yum 2.1. yum是什么 2.2. ...
- document.onselectstart=function(){return false;} 引起的拖动问题
在网页中拖动时,会引起某些文字或一些内容被选中,导致网页中蓝蓝的一片,视觉效果很差,所以我加了个1.document.onselectstart=function(){return false;}或者 ...
- mvc导出数据到pdf
using iTextSharp;using iTextSharp.text;using iTextSharp.text.pdf; , , ") { System.Collections.A ...
- python中学习K-Means和图片压缩
python中学习K-Means和图片压缩 大家在学习python中,经常会使用到K-Means和图片压缩的,我们在此给大家分享一下K-Means和图片压缩的方法和原理,喜欢的朋友收藏一下吧. 通俗的 ...
- Realm学习总结
参考博客: http://www.jianshu.com/p/096bec929f2a http://www.cnblogs.com/ilyy/p/5648051.html 参考的博客介绍很详细,我就 ...
- 给php安装openssl扩展
转自 http://blog.csdn.net/sinat_23678421/article/details/42217971
- MongoDB导入文件夹(内含json和bson文件)
1. 使用mongo命令将数据库删除: mongo命令: use db_name; db.dropDatabase() 2. 导入(指定文件夹)数据: linux命令: mongorestore -d ...
- VMware中为CentOS配置静态ip并可访问网络-windows下的VMware
首先确保虚拟网卡(VMware Network Adapter VMnet8)是开启的,然后在windows的命令行里输入“ipconfig /all”,找到VMware Network Adapte ...
- Day04:异常处理(二) / 多线程基础
多线程 线程是什么? 一个线程是线程一个顺序执行流. 同类的多个线程共享一块内存空间和一组系统资源,线程本身有一个供程序执行时的栈堆.线程在切换时负荷小,因此,线程也被称为轻负荷进程.一个进程中可以包 ...
- LeetCode.1207-唯一的元素出现次数(Unique Number of Occurrences)
这是小川的第次更新,第篇原创 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第269题(顺位题号是1207).给定一个整数数组arr,当且仅当该数组中每个元素的出现次数唯一时,返回tr ...