【Java基础教程】(二十二)Java新特性篇 · 第二讲:foreach循环——概念及优缺点、使用方式及应用场景~

这篇具有很好参考价值的文章主要介绍了【Java基础教程】(二十二)Java新特性篇 · 第二讲:foreach循环——概念及优缺点、使用方式及应用场景~。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Java基础教程】(二十二)Java新特性篇 · 第二讲:foreach循环——概念及优缺点、使用方式及应用场景~,# Java基础教程,java,开发语言,后端,java-ee,intellij-idea

1️⃣ 概念

Java的 foreach 特性最初出现在JDK 1.5中,也被称为“增强的for循环”。它的设计目的是提供一种简洁、易读的语法,用于遍历集合或数组中的元素,减少了传统 for循环的冗余代码和错误机会。

简单来说,foreach是一种迭代器模式的变体,它允许我们以简单且直观的方式遍历一个集合或数组中的元素,并对每个元素执行相应的操作。foreach语句使用起来更加直观,使代码更易于理解和维护。

下面先来回顾一下传统数组输出的操作形式。

//	范例 1: 数组输出
package com.xiaoshan.demo;

public class TestDemo{
	public static void main(String args[]){
		int data[] = new int[]{1,2,3,4,5};
		for (int x=0; x<data.length; x++){
			System.out.print(data[x] + "、");
		}
	}
}

程序执行结果:

1、2、3、4、5、

在传统的数组输出操作中,往往会使用 for 循环来控制索引的下标,从而实现数据的输出操作。但一部分开发者会认为这样的输出方式需要控制索引,过于麻烦,更希望能够简化一些。所以从 JDK 1.5开始对于for 循环有了以下形式:

for (element_type element : collection) {
    // 在此处执行针对 element 的操作
}

语法中,element_type 是集合或数组中元素的类型, element 表示在每次循环迭代时访问的元素,collection则表示要遍历的数组或集合,在每一次循环时会自动的将数组的内容设置给变量。此时的 for 循环操作在每次循环时会自动将当前数组(或集合)的内容依次取出,这样就可以避免索引问题。

//	范例 2: 利用foreach循环实现输出
package com.xiaoshan.demo;

public class TestDemo {  
	public static void main(Stringl args[]){
		int data[] = new int[]{1,2,3,4,5};	//定义数组
		for (int x : data){               	//循环次数由数组长度决定
		//每一次循环实际上都表示数组的角标增长,会取得每一个数组的内容,并且将其设置给x 
			System.out.println( x + "、");	 //x  就是每一个数组元素的内容
		}
	}
}

程序执行结果:

1、2、3、4、5、

2️⃣ 优势和缺点

优点:

  • 语法简洁:foreach提供了一种紧凑的语法,减少了传统for循环的代码量;
  • 避免了索引越界错误:foreach内部使用迭代器实现,能够自动处理集合或数组的边界情况,避免了常见的越界错误;
  • 提高可读性:foreach语法可读性高,更符合自然语言描述集合遍历的过程。

缺点:

  • 无法修改集合/数组长度:由于foreach底层使用迭代器,无法在遍历过程中修改集合或数组的长度;
  • 无法获取当前元素的索引:foreach循环中无法直接访问当前元素的索引,需要通过其他方式解决。

3️⃣ 使用及应用场景

  • 遍历数组:

    // 范例 3: foreach 遍历数组
    package com.xiaoshan.demo;
    
    public class TestDemo {  
    	public static void main(String args[]){
    		int[] numbers = {1, 2, 3, 4, 5};
    	  	for(int number : numbers) {
    	      	System.out.println(number);
    	  	}
    	}
    }
    
  • 遍历集合:

    // 范例 4: foreach 遍历集合
    package com.xiaoshan.demo;
    
    public class TestDemo {  
    	public static void main(String args[]){
    		List<String> fruits = Arrays.asList("apple", "banana", "cherry");
    		for (String fruit : fruits) {
          		System.out.println(fruit);
      		}
    	}
    }
    
  • 遍历自定义类型集合:

    // 范例 5: foreach 遍历自定义类型集合
    package com.xiaoshan.demo;
    
    class Person {
    	String name;
        public Person(String name){
    		this.name = name;
    	}  
    	// getter和setter等代码省略
    }
    
    public class TestDemo {  
    	public static void main(String args[]){
    		List<Person> people = new ArrayList<>();
    		  // 添加Person对象到people集合
    		  people.add(new Person("张三"));
    		  people.add(new Person("王五"));
    		  for (Person person : people) {
    		      System.out.println(person.getName());
    		  }
    	}
    }  
    
  • 使用带有索引的foreach循环:

    // 范例 6: 带有索引的foreach 遍历
    package com.xiaoshan.demo;
    
    public class TestDemo {  
    	public static void main(String args[]){
    		String[] fruits = {"apple", "banana", "cherry"};
    	  	int index = 0;
    	  	for (String fruit : fruits) {
    	      	System.out.println(index + ": " + fruit);
    	      	index++;
    	  	}
    	}
    }
    

需要注意的是,范例6是通过借助 index变量,手动维护索引计数。

从以上案例可以发现,foreach 适用于各种遍历集合或数组的场景,特别是当我们只需要访问元素而不修改集合时,foreach提供了一种简洁的方式。

常见的应用场景主要包括:

  • 遍历集合进行数据处理、过滤或打印。
  • 对数组执行元素计数、求和等操作。
  • 针对自定义类型集合进行持久化、转换等处理。

而在使用foreach循环时,需要注意的是,foreach 循环中不能修改集合/数组的长度,否则会抛出 ConcurrentModificationException 并发修改异常。如果需要同时访问索引和元素,可以通过其他方式实现(如使用额外的计数器变量)。

🌾 总结

本文中,我们详细介绍了Java的 foreach特性,从它的起源、概念,到优缺点、特征和基础语法进行了全面讲解。我们还提供了丰富的代码案例来演示其使用技巧,并探讨了foreach的应用场景和注意事项。

通过合理地运用foreach特性,能够使代码更加简洁、易读,并且避免常见的错误。在日常开发中,我们建议熟练掌握foreach的用法,以便更高效地处理集合或数组的遍历操作。


温习回顾上一篇(点击跳转)《【Java基础教程】(二十一)Java新特性篇 · 第一讲:可变参数——概念及优缺点、特征及应用场景、使用技巧、构建动态日志工具实践~》

继续阅读下一篇(点击跳转)《【Java基础教程】(二十三)Java新特性篇 · 第三讲:泛型 Generics——泛型使用方式、通配符、类型擦除机制,对协变和逆变的支持 ~》
文章来源地址https://www.toymoban.com/news/detail-602178.html

【Java基础教程】(二十二)Java新特性篇 · 第二讲:foreach循环——概念及优缺点、使用方式及应用场景~,# Java基础教程,java,开发语言,后端,java-ee,intellij-idea

到了这里,关于【Java基础教程】(二十二)Java新特性篇 · 第二讲:foreach循环——概念及优缺点、使用方式及应用场景~的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第二章:25+ Python 数据操作教程(第二十二节如何从 R 调用或运行 python)持续更新

    本文介绍了如何从 R 调用或运行 python。这两种工具都有自己的优点和缺点。使用这两个工具中最好的包和功能并将其组合起来总是一个好主意。在数据科学领域,这些工具在使用方面拥有良好的市场份额。R 主要以数据分析、统计建模和可视化而闻名。而Python在深度学习和自

    2024年02月07日
    浏览(39)
  • 【Java基础教程】(二十六)Java新特性篇 · 第六讲:注解——解码程序设计中的元数据利器,用小小的@符里做大大的开发~

    Java 注解(Annotation) 是Java语言中一种元数据形式,它提供了一种在代码中添加元数据的方式。注解为程序员提供了向代码中添加额外信息的能力,这些额外信息可以被编译器、工具或者运行时环境使用。 优点: 提供了一种 更加简洁和可读性强 的代码编写风格; 增强代码的

    2024年02月16日
    浏览(28)
  • Java基础二十二(对集合元素排序比较)

    1. 使用 Comparable 接口实现默认排序 Comparable 是 Java 中的一个接口,用于定义对象之间的排序规则。 实现了 Comparable 接口的类可以比较其对象的大小(包装类都实现了该接口),从而可以在集合类(如 TreeSet、TreeMap 等)中进行排序和查找操作。这种排序被称为类的自然排序,

    2024年02月10日
    浏览(35)
  • 第二十二章 光照贴图

    光照贴图过程将预先计算场景中静态物体表面的亮度,并将结果存储在称为“光照贴图”的纹理中供以后使用。光照贴图可以包含直接光照和间接光照,以及阴影效果。但是,烘焙到光照贴图中的数据无法在运行时更改,这就是为什么移动静态物体后,阴影不会跟随移动。接

    2024年02月02日
    浏览(35)
  • 线代基础第二讲——矩阵

    基础知识结构   求矩阵的逆: 1.定义 2.用伴随矩阵求逆矩阵 3.用初等变换求逆矩阵 这就是读者对矩阵的初步认识——表达系统信息(systematical information) 再看一个矩阵: 重要观点1:矩阵是由若干行(列)向量拼成的——上面那个矩阵可以看作是由三个行向量[1,2,3],[5,7,9]和

    2024年02月14日
    浏览(30)
  • 【Vue3 知识第二讲】Vue3新特性、vue-devtools 调试工具、脚手架搭建

    1.1 重写双向数据绑定 1.1.1 Vue2 基于Object.defineProperty() 实现 数字化管理平台 Vue3+Vite+VueRouter+Pinia+Axios+ElementPlus 权限系统-商城 个人博客地址 把 Vue 中的核心方法 defineReactive 做一些简化如下: Vue通过defineReactive方法实现对需要观察的对象的每个属性进行监控。dep对象就相当于一

    2024年02月10日
    浏览(31)
  • 第二十二章 Unity 光照贴图

    光照贴图过程将预先计算场景中静态物体表面的亮度,并将结果存储在称为“光照贴图”的纹理中供以后使用。光照贴图可以包含直接光照和间接光照,以及阴影效果。但是,烘焙到光照贴图中的数据无法在运行时更改,这就是为什么移动静态物体后,阴影不会跟随移动。接

    2024年02月04日
    浏览(30)
  • STP和MTP(第二十二课)

    2、如何实现 1)在MSTP网络种,引入了域的概念,称为MST域 2)每一个MST域中包含一个或多个“生成树”称为“实例” 3)每个“实例生成树”都可以绑定vlan,实现vlan数据流的负载分担/负载均衡 4)默认情况下,所有的vlan都属于“实例树0:即:instance 0” 5)不同的“实例树”、

    2024年02月15日
    浏览(41)
  • Redis 7 第二讲 数据类型 基础篇

    Commands | Redis https://redis.io/commands/ Redis命令中心(Redis commands) -- Redis中国用户组(CRUG) Redis命令大全,显示全部已知的redis命令,redis集群相关命令,近期也会翻译过来,Redis命令参考,也可以直接输入命令进行命令检索。 http://www.redis.cn/commands.html 注:命令不区分大小写 KEYS

    2024年02月11日
    浏览(32)
  • 第二十二章:HBase的CRUD操作

    HBase是一个分布式、可扩展、高性能的列式存储系统,基于Google的Bigtable设计。它是Hadoop生态系统的一部分,可以与HDFS、MapReduce、ZooKeeper等组件集成。HBase具有高可靠性、高性能和高可扩展性,适用于大规模数据存储和实时数据访问场景。 在HBase中,数据以行为单位存储,每行

    2024年02月20日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包