一个简单的实验,Java数组遍历

JAVA实验二 数组 一、实验目的:1、学会使用一维与二维数组管理简单数据。2、学会编写简单的菜单驱动(命令行式)的Java程序二、实验环境:PC WINDOWS NETBEAN  三、实验内容:1.定义一个int型的一维数组,数组的长度由键盘输入,为数组中的元素随机赋值。依次完成如下功能:(1) 输出数组中的元素。每行输出最多十个数字,数字之间用Tab键分隔;(2) 计算数组中元素之和,并输出;(3) 求出数组中元素的最大值及其位置(若有多个相同的最大值,仅输出第一个),并输出。 package javaa 阅读详情

Java提供了多种数组遍历的方法,从传统的for while到新的foreach. 那么,倒底该选择哪种遍历方式呢,也许很多人不会刻意关心这类问题,人们大多凭个人习惯来选择.

本人以前也不曾注意过,只不过在玩了project euler之后,逐渐开始关心起java程序的性能来(我也不再用C++写了,这种小游戏没必要).

 

于是乎就做了一个对比试验,在数组中放置从1到1m的数,然后将它们累加起来,计算时间.

为了说明问题,我将分三种方式逐一对比,

1. 使用传统的for循环

2. 使用java的exception

3. 使用foreach

 

import callback.Callback;


public class Foo {

	final static int INIT_NUM = 1000000;
	static int array[] = new int[INIT_NUM];
	
	public static void main(String[] args) {
		for (int i = 0; i < INIT_NUM; i ++)
			array[i] = i + 1;
		
		PerformDiag.perform(new Callback() {
			
			@Override
			public void execute() {
				testLoop();
			}
		}, PerformDiag.NANO_PREC);
		
		PerformDiag.perform(new Callback() {
			
			@Override
			public void execute() {
				testException();
			}
		}, PerformDiag.NANO_PREC);
		
		PerformDiag.perform(new Callback() {
			
			@Override
			public void execute() {
				testForeach();
			}
		}, PerformDiag.NANO_PREC);
	}
	
	static void testLoop()
	{
		int sum = 0;
		for (int i = 0; i < array.length; i++)
			sum += array[i];
	}
	
	static void testException()
	{
		int sum = 0, i = 0;
		while(true)
		{
			try
			{
				sum += array[i++];
			}
			catch (IndexOutOfBoundsException e) { break; }
		}
	}
	
	static void testForeach()
	{
		int sum = 0, i = 0;
		for (Integer a : array) {
			sum += a;
		}
	}
}


这里PerformDiag是一个简单的性能诊断,只是将回调前后的时间差算出来,精度可以选择milli或nano.

执行结果如下,

use time = 4817412 nano secs
use time = 3322288 nano secs
use time = 20045063 nano secs


可以看到,传统的for循环排在第二位,使用了exception的速度最快,而foreach则远远慢于前两者.

 

这个结果很容易解释,由于java本身有边界溢出异常,事实上语言框架已经在帮你检查循环条件了,for循环则再一次执行了这个动作,肯定会浪费一些时间.

而如果使用while(true)这样的形式,编译器会优化成一个短跳转指令,这样在代码里就没有条件判断,直到当exception被抛出我们才跳出循环.

而foreach虽然貌似也没有条件判断,但是它只限于wrapper类,频繁的构造对象肯定会对速度产生影响,少打几个字,会付出大量的性能代价.

 

总的来说,如果你的Java程序对性能比较感冒,建议使用while(true) + exception的组合,理论上这种写法速度更快.

Power Automate 最常用的十大场景以及解决方案 3.2 获取指定主题含有附件邮件,然后读取csv附件内容,插入数据库,调度执行存储过程,最后通过Power automate 发送paginated report 特殊格式报表给发件人。Power Automate 作为微软推出的自动化工作流工具,其适用场景非常广泛,尤其在数据库查询自动化方面能显著提升效率。2.8发送邮件,把生成csv文件当作附件,把生成html当作邮件内容在邮件boty展示。3.1 读取数据库数据,定时发送预警邮件并抄送附件和展示内容在邮件中。:已有微软产品栈,需快速实现部门级自动化。 阅读详情

相关推荐

MeshLab新手必看:5分钟搞定泊松表面重建(附完整点云处理流程)

本文详细介绍了如何使用MeshLab进行泊松表面重建,从点云数据导入、预处理到核心参数设置,再到后处理与模型优化,提供了完整的3D重建流程指南。特别适合计算机视觉和3D重建领域的新手快速掌握泊松重建技术,提升工作效率。

kafka6courier的博客 232

java vector源代码_Java 集合系列06之 Vector详细介绍(源码解析)和使用示例

转载请注明出处:http://www.cnblogs.com/jxldjsn/p/6477514.html第1部分 Vector介绍Vector简介Vector 是矢量队列,它是JDK1.0版本添加的类。继承于AbstractList,实现了List, RandomAccess, Cloneable这些接口。Vector 继承了AbstractList,实现了List;所以,它是一个队列,支持相关...

weixin_42106765的博客 296

20240128 C#与SCPI协议实战:轻量级仪器控制库ScpiNet应用指南

本文详细介绍了轻量级C#库ScpiNet在仪器控制中的应用。相较于传统的NI-VISA,ScpiNet无需安装庞大运行时,通过纯C#实现直接与USB或以太网设备通信,支持跨厂商SCPI仪器。文章提供了从快速连接到实战封装、错误处理的完整指南,帮助开发者构建简洁高效的自动化测试系统。

h9j8k7l6m5n的博客 549

Java Vector遍历方法

import java.util.*; public class TestVector { public static void main(String[] args) { Vector<String> S_vec= new Vector<String>(); S_vec.add("one"); S_vec.add("two"); S_vec.add(

Cons_Step_By_Step 4769

Windows系统监控实战:Grafana+Prometheus+node_exporter配置全攻略

本文提供了一套完整的Windows系统监控解决方案,详细介绍了如何使用Grafana、Prometheus和node_exporter(Windows版为windows_exporter)构建可视化监控平台。从环境准备、组件安装配置,到数据可视化与常见问题排查,手把手指导您实现从数据采集到仪表盘展示的全过程,帮助您从被动救火转向主动预警,有效保障Windows服务器稳定运行。

assembly8low的博客 249

通俗理解Xgboost

为了简化计算,XGBoost采用了一阶导数(梯度)和二阶导数(Hessian)来近似损失函数的变化,从而推导出叶子节点值的更新公式。其中 z 就是所有树的叶子节点分数之和。通过这两个正则化项,XGBoost能够在优化目标函数时,不仅考虑损失函数的最小化,还考虑了模型的复杂度,从而达到更好的泛化性能。正则化项通常包括两个部分:一个是与叶子节点数量相关的项,另一个是与叶子节点输出值大小相关的项。通过这种方式,XGBoost能够有效地计算出每个叶子节点的值,同时通过正则化项来平衡模型的复杂度和泛化能力。

金融风控笔记 755

Java Vector遍历的五种方法

Java Vector遍历的五种方法 ------------------------------------------------------------------------------------------------- package list; import java.util.Enumeration; import java.util.Iterator; impor

CentForever的博客 2万+

知识图谱实战:从零搭建一个企业级金融风控图谱(附完整代码)

本文提供了一份从零构建企业级金融风控知识图谱的实战指南。通过使用Neo4j图数据库和Python,手把手教你整合多源数据、设计数据模型,并利用Cypher查询与图算法挖掘隐藏的关联风险与欺诈网络,附有完整代码,助力金融科技从业者实现从数据孤岛到全局风险洞察的升级。

weixin_29095587的博客 363

Java基础 - 单列集合,ArrayList,Vector,Iterator,集合的遍历

Java基础 - 单列集合,ArrayList,Vector,Iterator,集合的遍历

mythmayor的博客 1681

Python爬虫实战——如何自动爬取百度搜索结果页面

本文介绍了如何使用Python爬虫抓取百度搜索结果页面的内容,包括如何构建搜索URL、获取页面HTML、解析内容、处理翻页以及存储数据等。通过该教程,您可以轻松实现批量抓取百度搜索结果,并为后续的数据分析和处理打下基础。希望本文能为您在爬虫开发、数据分析等领域提供帮助。如果您在实际应用过程中遇到问题,可以参考反爬虫应对策略,并结合实际需求进行调整。

2201_76125261的博客 1711

Allegro快速编辑丝印文字操作指导

选择setup-Application Mode-placement edit。Allegro支持丝印文字的编辑,下面介绍快速编辑丝印文字的两种方法如下。这个功能还支持拷贝粘贴,可以从其它地方拷贝过来,免去了书写的麻烦。出现text edit窗口,输入自己需要的文字,点击ok。鼠标移动到丝印文字位置,文字会被高亮起来。Allegro快速编辑丝印文字操作指导。点击丝印文字,丝印会被高亮起来。选择Text edit 命令。输入需要更改后的文字,如下。右击选择text edit。以编辑下方丝印文字为例。

weixin_54787054的博客 4193

JAVA程序设计实验二

1. (填空题) 数组的引用与元素 编写一个Java应用程序,该程序在命令行窗口输出数组的引用以及元素的值。请把【代码1】,【代码2】【代码3】和【代码4】的语句补充完整。(注意:该程序在JDK中执行) 程序模板如下:

2303_77248325的博客 1004

uniapp - 解决App端(安卓/苹果)使用uni.openlocation跳转第三方高德地图白屏问题,安卓苹果ios平台使用应用内置地图查看位置打不开,打包后App高德地图页面白屏不显示的问题!

uni-app,安卓Android,苹果ios,安卓app端,苹果App端,uniapp苹果安卓app,高德地图白屏,uniapp调用内置高德地图白屏,uniApp使用uni.openlocation空白不显示地图,uniappapp端如何解决openlocation地图不显示问题,打开第三方地图显示位置地图没反应,uni.openlocation跳转第三方高德地图,APP端白屏问题,使用uni.openlocation跳转到第三方导航软件的时候,app端跳转的是高德地图,但是白屏没有反应,打包发布后白

🏆 前端领域优质创作者 1万+

实验一Java的认识

本次实验我学习了如何配置Java的运行环境,并且学会了如何设置环境变量。最后学到了两种编写Java程序的方法,方法一:创建文本文档将后缀改为,java在记事本中编辑,用DOS环境编译运行体现运行结果;本次实验我是用方法一完成的实验。在实验中出现了好多问题,比如怎么设置环境变量、创建类的类名必须和文件名保持一致等等问题,但都被我解决了。3.编写与编译一个简单的Java 源程序,声明并创建一个一维数组与二维数组,并且赋初值。2.编写与编译一个简单的Java 源程序,在屏幕上输出”hello, java!

2401_84038155的博客 362

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

java中数组遍历的三种方式

1.for循环遍历 通常遍历数组都是使用for循环来实现。遍历一维数组很简单,遍历二维数组需要使用双层for循环,通过数组的length属性可获得数组的长度。 2.Arrays工具类中toString静态方法遍历 利用Arrays工具类中的toString静态方法可以将一维数组转化为字符串形式并输出。 3.foreach语句遍历 java5之后,Java提供了一种更简洁的循环:foreach循环,这种循环遍历数组和集合更加简洁。使用foreach循环遍历数组时,无须获得数组和集合长度,无须根据索引来访问数组

胡毛毛的博客 9万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Java二维数组的遍历

但是请注意,这种方式的动态初始化虽然有时很方便,但在处理更复杂的数组操作时可能会带来一些困惑,因为它与常规的静态初始化方式有所不同。在动态初始化时,可以先声明二维数组,然后逐个对每个子数组进行初始化。默认初始化是在声明二维数组后不进行任何初始化,这时数组的所有元素都将被自动初始化为默认值(对于整数类型,默认值为0)。在静态初始化时,每个子数组的大小必须相同,且每个子数组的大小在声明时必须已知。动态初始化是在声明二维数组时只分配内存,然后在需要时再对数组元素进行赋值。

Code-5的博客 3144

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

关于java的一个简单二维数组foreach遍历问题

问题:foreach遍历一个二维数组,到底是如何遍历的呢? 这与数组在栈堆中的内存位置有关系,贴图: 首先int[][] arr 压栈,然后在堆内存中分配一个二维数组的地址,引用给arr声明,注意,这里的地址其实是一个一维数组,一维数组中存放的都是地址值,然后遍历arr[],再次分配几个一维数组堆内存,将它们在堆中的地址值存储在arr[]中,这样一个二维数组就完成了,注意,新分配的这几个一...

qq_41063182的博客 1万+

java二维数组遍历

在这个例子中,我们通过 for循环来遍历二维数组,当遍历完所有元素后,我们使用了 sorted方法将该数组转换为一个新的集合: 对于这个新集合,我们要先判断它是否为空集合。遍历空集合可以通过下面两个步骤来实现: 在 Java中,判断数组中是否有元素有两种方法: (1)、使用“从上到下”和“从左到右”的方法来遍历数组,如果数组中有元素,则表示数组被遍历过了;我们使用 Java中的两种遍历方法来遍历空列表: 遍历空列表的代码如下: 第一个参数是一个空数组,第二个参数是一个包含已遍历空列表中元素的数组。

花生日记 5255

java三维数组的遍历

遍历一个三维数组 数组遍历 今天我在二位数组的基础上,尝试了三维数组的遍历 import java.util.Arrays; public class test{ public static void main(String[] args) { int[][][] arr= {{{1,2},{3,4}},{{5,6},{7,8},{7}},{{1,2}},{{6,99},{78,458,9...

戴鑫的博客 3512

Java数组的遍历

数组的遍历 使用for循环遍历数组 使用for-each循环遍历数组 使用while循环和迭代器遍历数组 使用Java 8的流API遍历数组 数组遍历的应用 求数组中的最大值 查询数组中指定位置的元素 将查指定元素对应的索引的功能提取为方法 添加数组元素 删除数组元素

Code-5的博客 3787

Java 多维数组遍历详解

数组是Java中的一种容器对象,它拥有多个单一类型的值。当数组被创建的时候数组长度就已经确定了。在创建之后,其长度是固定的。下面是一个长度为10的数组: public class ArrayDemo { private int arraySize=10; public int[] arrayOfIntegers = new int[arraySize]; } 上面的代码是一维数组的例...

weixin_30765577的博客 1168

java for数组遍历数组_Java foreach操作(遍历)数组

语法:我们分别使用 for 和foreach 语句来遍历数组运行结果:练习:import java.util.Arrays;public class HelloWorld {public static void main(String[] args) {// 定义一个整型数组,保存成绩信息int[] scores = { 89, 72, 64, 58, 93 };// 对Arrays类对数组进行...

weixin_35661850的博客 9615

java 二维数组的遍历

java的二维数组本质上还是一维数组,数组的每个元素都是一个一维数组的引用。 public class Array { /** * 二维数组的遍历 */ public static void main(String[] args) { //首先定义一个二维数组 int[][] arr = new int[][]{{1,2,3},{4,5,6},{7,8,9}};...

zhuyongxin_6688的博客 4643

java三维数组遍历_Java 多维数组遍历详解 – 码农网

数组是Java中的一种容器对象,它拥有多个单一类型的值。当数组被创建的时候数组长度就已经确定了。在创建之后,其长度是固定的。下面是一个长度为10的数组:public class ArrayDemo {private int arraySize=10;public int[] arrayOfIntegers = new int[arraySize];}上面的代码是一维数组的例子。换句话说,数组长度只...

weixin_34776645的博客 1116

java数组中常见操作1——遍历

所谓遍历(Traversal),字面意思是遍历就是全部走遍,到处周游的意思。 数组遍历:就是依次输出数组中的每一个元素。注意:数组提供了一个属性length,用于获取数组的长度。格式:数组名.length 代码演示并改进过程: 1、获取每一个元素,如何获取呢?我们知道数组名结合编号(索引)就可以找到数据 class ArrayTest1 { public static void ...

hewenqing 1351
上一篇: 使用表驱动技术优化程序结构
下一篇: dlmalloc 2.8.6 源码详解(1)
vector03
博客等级 码龄16年 62粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值