增强for循环和一般for循环的对比使用

简介: 这篇文章对比了Java中的增强for循环(for-each循环)和传统的for循环,介绍了增强for循环的优点,如简化数组或集合的遍历、提高代码的可读性和可维护性,并指出增强for循环不适用于需要修改数组或集合元素的场景。文章还提供了增强for循环的语法格式,并展示了在实际应用中如何使用增强for循环来遍历数组和数组对象。

1、增强版和普通版对比

一般for循环

    int[] num = {1,2,3,4,5,6};
    for(int i =  0 ; i<num.length ; i++){ 
        System.out.println("元素:"+ num[i]); 
    }

增强for循环

     int[] num = {1,2,3,4,5,6};
     for(int i :num){   //集合或数组a : 数组名称num
         System.out.println("元素:"+ i); 
     }

使用增强for循环的优点:

  • 增强 for 循环的作用是简化集合或数组的遍历操作,减少编写代码的工作量 增加代码的可读性和可维护性。使用增强 for 循环可以避免使用传统的 for 循环的索引变量,使代码更简洁、清爽,并且可以 避免数组越界等常见问题。

  • 增强 for 循环最大的好处是在语法层面上提供了一种 更简单、更直观的集合遍历方式 ,使得代码变得更加简单、易读、易写,从而提高了编码效率和代码可维护性。

  • 需要注意的是,增强 for 循环只能用于遍历集合或数组中的元素, 无法用于修改集合或数组中的元素。如果需要修改集合或数组中的元素,仍然需要使用传统的 for 循环或迭代器等方法。

2、什么是增强for循环?

增强for循环 (也称for each循环) 是迭代器遍历方法的一个“简化版”,是JDK1.5以后出来的一个高级for循环 专门用来遍历数组和集合。

其内部原理是一个Iteration迭代器,在遍历数组/集合的过程中,不能对集合中的元素进行增删操作。

3、增强for循环的使用(语法)

1.使用范围:用来遍历集合和数组(必须有遍历目标,目标只能是集合或者数组),所有单列表集合都可以使用增强for循环。
  2.格式如下:

for(ElementType element: arrayName) 
{ //集合或数组的数据类型 变量名:集合名/数组名
    System.out.println(变量名);
};

4、实际应用

4.1 遍历数组

普通的一般 for 使用

    /**
     * 力扣  移除数组中的指定元素
     * @param nums
     * @param val
     * @return
     */
    public static int removeElement(int[] nums, int val) {
        int [] mynums = new int[nums.length];
        int rs = 0;
        for(int i = 0; i < nums.length; i++){
            if(nums[i] != val){
                mynums[rs] = nums[i];
                rs ++;
            }
        }
        return mynums.length;

    }

使用增强 for 循环

    /**
     * 增强for循环
     * @param nums
     * @param val
     */
    public static void test(int [] nums,int val){
        int rs = 0;
        for(int num : nums){
            if(num != val){
                nums[rs] = num;
                rs ++;
            }
        }
    }

4.2 遍历数组对象

遍历数组对象,通过对象访问对象的属性值。

    /**
     * 对象循环
     * @param students
     */
    public static void testObject(Student [] students){
        for(Student student : students){
            System.out.println("姓名:" + student.name + ",年龄:" + student.age);
        }
    }

    public static void main(String[] args) {
        Student  student1 = new Student("张三1",18);
        Student  student2 = new Student("张三2",19);
        Student  student3 = new Student("张三3",20);
        Student  student4 = new Student("张三4",21);
        //组合数组对象
        Student [] students = {student1, student2, student3, student4};

        Solution.testObject(students);

    }

//学生类
class Student{
    String name;
    int age;

    Student(){

    }

    Student(String name, int age){
        this.name = name;
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public String getName() {
        return name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setName(String name) {
        this.name = name;
    }
}

在这里插入图片描述

相关文章
|
3月前
|
人工智能 机器人 Java
黑马最新项目
AIGC项目涵盖大模型私有化部署、聊天机器人、RAG知识库及代码提示工具;天机AI集成SpringAI与多模型工作流;云岚到家聚焦微服务与分布式架构;四方保险构建统一支付与时序数据应用;星辰WMS与Dify项目即将发布。
193 0
黑马最新项目
|
消息中间件 缓存 监控
缓存与数据库一致性问题的解决策略
本文系统探讨了缓存与数据库一致性问题的根源及解决方案,涵盖Cache-Aside、Read/Write-Through等主流策略,结合分布式锁、消息队列、布隆过滤器等技术应对缓存穿透、击穿与雪崩,并提出版本控制、事件驱动等高级保障机制,辅以监控告警与最佳实践,助力构建高性能、高一致性的分布式系统。
469 0
|
存储 Java C++
Java数组:静态初始化与动态初始化详解
本文介绍了Java中数组的定义、特点及初始化方式。
1125 12
|
Java 编译器 Spring
面试突击78:@Autowired 和 @Resource 有什么区别?
面试突击78:@Autowired 和 @Resource 有什么区别?
17410 7
|
存储 NoSQL Java
【数据结构进阶】哈希表
哈希表是一种高效的数据结构,通过哈希函数实现数据映射,支持平均O(1)时间复杂度的查找、插入和删除操作。本文详细介绍了哈希表的基本概念、哈希函数的设计(如直接定址法和除留余数法)以及哈希冲突的解决方法(如开放定址法和链地址法)。同时,文章通过代码实例展示了线性探测和链地址法两种哈希表的实现过程,并分析了各自的优缺点。最后总结指出,合理选择哈希函数和冲突解决策略是优化哈希表性能的关键。
1258 2
|
存储 Java
|
Java 物联网 程序员
还在纠结抽象类和接口?看这篇就够了!
本文从一位程序员的角度出发,讲述了其小学弟在Java开发面试中遇到的难题——抽象类与接口的区别。文章不仅详细解析了两者的定义、特点及主要差异,还提供了实际开发中的应用场景和面试答题技巧,帮助读者更好地理解和应用这一重要知识点。
1809 12
|
Java Spring
SpringBoot: 启动Banner在线生成工具
SpringBoot: 启动Banner在线生成工具
39368 1
SpringBoot: 启动Banner在线生成工具
|
缓存 Java 开发者
Java字面量详解:概念、分类与使用实例
本文介绍了Java字面量的概念、分类及应用。
669 11