我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么使用Java的For循环

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么使用Java的For循环

这篇文章主要介绍“怎么使用Java的For循环”,在日常操作中,相信很多人在怎么使用Java的For循环问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Java的For循环”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一、基础的for循环

1、使用while也是一种循环方式,此处探究for相关的循环,就不做拓展了。

2、遍历数组的时候,初学时是使用的如下样式的for循环:

for(int i=0;i<a.length;i++){     System.out.println(n); }

3、而遍历集合的时候使用的都是Iterator迭代器:

给定一组人名,两两组队(此处允许自己和自己组队),实现如下:

enum Option {Tom, Jerry, Jack, Mary}

想象中的写法是:

Collection<Option> options = Arrays.asList(Option.values()); for(Iterator<Option> i = options.iterator(); i.hasNext();){     for (Iterator<Option> j = options.iterator(); j.hasNext();) {         System.out.println(i.next()+" "+j.next());     }

但是执行过后你会发现这段代码是有瑕疵的,出现的结果只有四组:

怎么使用Java的For循环

那么剩下的组合去哪里了呢?

这里程序并不会抛出异常,只是单纯的因为i.next()每次都会取下一个值,所以就出现了上图的情况。

但是,如果外部集合的元素大于内部元素:

例如下面这段代码:

enum OptionFirst {Tom, Jerry, Jack, Mary} enum OptionSecond {Tom, Jerry, Jack, Mary, Mali, Tomsun, Lijie, Oolyyou}  public static void main(String[] args) {     Collection<OptionFirst> optionFirstCollection = Arrays.asList(OptionFirst.values());     Collection<OptionSecond> optionSecondCollection = Arrays.asList(OptionSecond.values());     for (Iterator<OptionFirst> i = optionFirstCollection.iterator(); i.hasNext(); ) {         for (Iterator<OptionSecond> j = optionSecondCollection.iterator(); j.hasNext(); ) {             System.out.println(i.next() + " " + j.next());         }     } }

运行后,就会抛出java.util.NoSuchElementException异常,造成的原因就是因为外部循环调用了多次,而内部循环因为元素不足,导致循环抛出了这样的异常。

要想解决这种困扰只需要在二次循环前添加一个变量来保存外部元素;即可实现想要达到的效果。

Collection options = Arrays.asList(Option.values());  for(Iterator i = options.iterator(); i.hasNext();){  Option option = i.next();  for (Iterator j = options.iterator(); j.hasNext();) {  System.out.println(option+" "+j.next());  }  }

怎么使用Java的For循环

二、for-each循环

这种循环方式不论是数组还是集合都实用,而且效率更高;表达形式更加简洁明了。

for(Element e:elements){     System.out.println(e); }

当再次遇到上面的两两组队问题时,根本不需要考虑元素不足的问题,而且代码也简洁多了:

for (Option option : options) {     for (Option rank : options) {         System.out.println(option + " " + rank);     } }

《Effective Java》中是这样子写for-each循环的:

怎么使用Java的For循环

三、for-each is not god

说了for-each那么多好处,但是它也不是神,并非万能的,有那么三种情况是它需要注意的。

3.1、解构过滤的时候不能使用

如果需要遍历集合,并删除选定的元素,就需要使用显式的迭代器,以便可以调用它的remove方法。不过在Java8中增加的Collection的removeIf方法常常可以避免显式的遍历。

例如下面这段代码:

List<String> list = new ArrayList<String>();  list.add("1"); list.add("2");  for (String item : list) {     if ("1".equals(item)) {         list.remove(item);         System.out.println("执行if语句成功");     } }

直接运行这段代码是没什么问题的,数组list能成功删除元素1,也能打印对应语句。

但是,我们进行如下任意一种操作:

  • 若把list.remove(item)换成list.add(“3”);操作如何?

  • 若在第6行添加list.add("3");那么代码会出错吗?

  • 若把if语句中的“1”换成“2”,结果你感到意外吗?

如果都能正确执行当然就不需要问了,所以3个都会报ConcurrentModificationException的异常;

怎么使用Java的For循环

执行结果异常

而出现这些情况的原因稍稍解释下就是:

首先,这涉及多线程操作,Iterator是不支持多线程操作的,List类会在内部维护一个modCount的变量,用来记录修改次数。

举例:ArrayList源码

protected transient int modCount = 0;

每生成一个Iterator,Iterator就会记录该modCount,每次调用next()方法就会将该记录与外部类List的modCount进行对比,发现不相等就会抛出多线程编辑异常。

为什么这么做呢?我的理解是你创建了一个迭代器,该迭代器和要遍历的集合的内容是紧耦合的,意思就是这个迭代器对应的集合内容就是当前的内容,我肯定不会希望在我冒泡排序的时候,还有线程在向我的集合里插入数据对吧?所以Java用了这种简单的处理机制来禁止遍历时修改集合。

至于为什么删除“1”就可以呢,原因在于foreach和迭代器的hasNext()方法,foreach这个语法,实际上就是

while(itr.hasNext()){     itr.next() }

所以每次循环都会先执行hasNext(),那么看看ArrayList的hasNext()是怎么写的:

public boolean hasNext() {     return cursor != size; }

cursor是用于标记迭代器位置的变量,该变量由0开始,每次调用next执行+1操作,于是:

所以代码在执行删除“1”后,size=1,cursor=1,此时hasNext()返回false,结束循环,因此你的迭代器并没有调用next查找第二个元素,也就无从检测modCount了,因此也不会出现多线程修改异常;但当你删除“2”时,迭代器调用了两次next,此时size=1,cursor=2,hasNext()返回true,于是迭代器傻乎乎的就又去调用了一次next(),因此也引发了modCount不相等,抛出多线程修改的异常。

当你的集合有三个元素的时候,你就会神奇的发现,删除“1”是会抛出异常的,但删除“2”就没有问题了,究其原因,和上面的程序执行顺序是一致的。

因此,在《阿里巴巴Java开发手册中有这样一条规定》:

怎么使用Java的For循环

3.2、转换

如果需要遍历列表或数组,并取代它的部分或者全部元素值,就需要使用列表迭代器或者数组索引,以便替换元素的值。

因为for-each是一循到底的,中间不做停留和位置信息的显示;所以要替换元素就不能使用它了。

3.3、平行迭代

如果需要并行的遍历多个集合,就需要显式的控制迭代器或者索引变量,以便所有迭代器或者索引变量都可以同步前进(就像上面讲述Iterator迭代器的时候提到的组合减少的情况,只想出现下标一一对应的元素组合)。

到此,关于“怎么使用Java的For循环”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么使用Java的For循环

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Scala for循环怎么使用

本篇内容介绍了“Scala for循环怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!基本语法:变量,变量的定义:不可变:val a
2023-06-02

MySQL中怎么使用WHILE循环模拟FOR循环

在MySQL中,没有直接的FOR循环语句,但是可以使用WHILE循环来模拟一个FOR循环。可以使用一个变量来充当计数器,然后在WHILE循环中对计数器进行递增操作来模拟FOR循环的功能。以下是一个使用WHILE循环模拟FOR循环的示例:
MySQL中怎么使用WHILE循环模拟FOR循环
2024-04-30

while和for循环怎么使用

本篇内容介绍了“while和for循环怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、概述Python中的循环语句有 for 和
2023-06-04

Python全栈的for循环怎么使用

这篇文章主要介绍“Python全栈的for循环怎么使用”,在日常操作中,相信很多人在Python全栈的for循环怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python全栈的for循环怎么使用”的疑
2023-06-21

C语言的for循环怎么使用

本篇内容主要讲解“C语言的for循环怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言的for循环怎么使用”吧!1、循环语句for的语法for (表达式1;表达式2;表达式3)
2023-07-02

C语言中for循环与while循环怎么使用

本文小编为大家详细介绍“C语言中for循环与while循环怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言中for循环与while循环怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、单层f
2023-07-02

怎么在shell中使用for循环

这篇文章将为大家详细讲解有关怎么在shell中使用for循环,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。代码如下:#!/bin/shi=1SUM=`sed -n $= tmp.txt` #
2023-06-09

sql for循环语句怎么使用

在SQL中,通常不直接支持循环语句。SQL是用于处理关系型数据库的查询语言,其主要用于选择、插入、更新和删除数据。然而,有些数据库管理系统提供了扩展功能,允许在SQL中使用循环。以下是一些常见的方法:使用游标(Cursor):游标是一个指
sql for循环语句怎么使用
2024-04-09

plsql游标for循环怎么使用

在PL/SQL中,游标可以用于遍历结果集并对每一行进行操作。游标通常与FOR循环一起使用。以下是一个示例,展示了如何在PL/SQL中使用游标和FOR循环:DECLARECURSOR my_cursor ISSELECT column1,
plsql游标for循环怎么使用
2024-04-22

shell的for循环怎么用

这篇文章主要介绍了shell的for循环怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇shell的for循环怎么用文章都会有所收获,下面我们一起来看看吧。for循环一般格式为:for var in ite
2023-06-27

python for循环怎么用

for 循环是一种用于遍历序列中每个元素的迭代结构。它的语法为:for variable in sequence:循环体(在每次迭代中执行)如果未被终止,则执行 else 子句(可选)Python for 循环用法什么是 for 循环?
python for循环怎么用
2024-05-22

Javascrip的for循环和数组怎么使用

这篇文章主要介绍“Javascrip的for循环和数组怎么使用”,在日常操作中,相信很多人在Javascrip的for循环和数组怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Javascrip的for
2023-06-22

Python里的For循环和While循环怎么用呢?

我们继续我们的Python基础的学习,昨天我们学习了字典类型的使用以及控制结构里的顺序结构 if eif条件判断 while循环等内容。

JS中六种For循环怎么使用

这篇文章主要介绍“JS中六种For循环怎么使用”,在日常操作中,相信很多人在JS中六种For循环怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JS中六种For循环怎么使用”的疑惑有所帮助!接下来,请跟
2023-06-30

python中append怎么在for循环使用

在Python中,可以通过使用append()方法将元素添加到列表中。在for循环中使用append()方法的一种常见方法是将循环变量的值添加到列表中。以下是一个使用append()方法在for循环中将元素添加到列表的示例:pythonmy
2023-10-18

java怎么用for循环给数组赋值

要使用for循环给数组赋值,可以按照以下步骤进行:1. 声明一个数组,并指定数组的长度。2. 使用for循环,从0开始遍历数组的索引。3. 在循环中,使用索引将值赋给数组的对应位置。以下是一个示例代码,通过for循环给数组赋值:```jav
2023-08-15

oracle中for循环语句怎么使用

在Oracle数据库中,没有像其他编程语言那样直接的for循环语句。但是可以使用LOOP、EXIT和END LOOP来实现循环操作。下面是一个在Oracle中使用LOOP语句实现简单循环的示例:DECLAREi NUMBER := 1;
oracle中for循环语句怎么使用
2024-04-09

编程热搜

目录