java基础 之 常用遍历方法

准备工作

准备工作:我们需要创建一个数组,两个列表,一个字符串和一个set集合,如下图所示
在这里插入图片描述

一、普通遍历循环

  • 说明:
    • 1、使用普通for循环我们需要先知道对应的数组或者列表的长度
    • 2、使用普通for循环,可以查询,可以修改,但是不可以删除
  • 语法格式:
    在这里插入图片描述
  • 代码使用:
    在这里插入图片描述

二、增强for

  • 说明

    1、增强for不需要知道遍历对象的长度
    2、只能遍历数组或其他实现了Iterable接口的集合。遍历时关心数据类型。需要如果列表和集合中数据类型不一致,遍历时需要设置成Object
    3、遍历字符串,不能直接使用增强for(因为没实现Iterable接口),可以将字符串转成列表后再使用增强for
    在这里插入图片描述
    4、只能查询数据,不能修改数据,是最简单且最具可读性的遍历数组方式
    5、如果列表中数据类型是一个类对象,是可以对类对象的属性进行修改

  • 语法格式:
    在这里插入图片描述

  • 代码使用:
    在这里插入图片描述

三、forEach

  • 说明:

    1、不需要知道遍历对象的长度
    2、Java 8引入的Stream API中的forEach方法,所以java版本至少是1.8
    3、不关心数组和集合中的元素类型
    4、使用条件:实现了Iterable接口的集合

  • 语法格式:
    在这里插入图片描述
  • 代码使用在这里插入图片描述

四、迭代器

  • 说明:

    1、是一种用于遍历集合(如列表、集合和映射等)的接口
    2、只能从前往后遍历集合中的元素,不能往回遍历
    3、不关心数据的类型

  • 常用的方法:
    • next() - 返回迭代器的下一个元素,并将迭代器的指针移到下一个位置
    • hasNext() - 用于判断集合中是否还有下一个元素可以访问
    • remove() - 从集合中删除迭代器最后访问的元素(可选操作)
  • 代码使用在这里插入图片描述

五、总结

数组单一类型的列表泛型的列表字符串set集合
普通for循环支持支持支持支持不支持
增强for支持支持支持不支持支持
forEach支持支持支持不支持支持
Iterator不支持支持支持不支持支持

普通for循环需要知道遍历的数组/列表的长度,其他不需要
增强for只支持遍历数组和数据为单一类型的列表
增强for、forEach、Iterator遍历的数据需实现Iterator接口
forEach需要的jdk版本应大于或等于1.8
forEach速度相比其他来说慢,不建议使用

六、代码奉上

import java.util.*;

public class For {
    public static void main(String[] args) {

        int[] arr = {1,2,3,4,5,6,7,8,9,10};      // 创建数组arr
        List<Integer> list = new ArrayList<>(); // 创建列表list
        // 对列表list添加类型为Integer的数据
        list.add(10);list.add(20);list.add(30);list.add(40);list.add(50);
        list.add(60);list.add(70);list.add(80);list.add(90);list.add(100);

        List list1 = new ArrayList<>();     // 创建泛型列表list1
        list1.add("abc");list1.add(123);list1.add('a');list1.add(true);list1.add(arr);// 对列表list1添加不同类型的数据:

        String str = "helloWorld";      // 创建字符串str
        Set set = new HashSet<>();  // 创建集合泛型集合set
        set.add(1);set.add("b");set.add('c');set.add(100);set.add("java");set.add(true);    // 对集合set添加数据


        /**  普通for循环  **/
        // 遍历数组
        for(int i=0;i<arr.length;i++){
            arr[i]+=100;  // 可以在此处对遍历的数据进行修改
            System.out.print(arr[i]+" ");   // 修改后的数据打印为:101 102 103 104 105 106 107 108 109 110
        }
        System.out.println();
        // 遍历列表(不关心列表中数据的类型)
        for (int i=0;i<list.size();i++){        // list1遍历相同,只需把列表名称修改即可
            list.set(i,10*i);  // 可以在此处对遍历的数据进行修改
            System.out.print(list.get(i)+" ");  // 修改后的数据打印为:0 10 20 30 40 50 60 70 80 90
        }
        System.out.println();
        // 遍历字符串
        for(int i=0;i<str.length();i++){
            if(str.charAt(i) == 'l'){   // 如果遍历的字符是'l',则将它改成'A'
                str = str.replace('l','A');
            }
            System.out.print(str.charAt(i)+" ");    // 修改后的数据打印:h e A A o W o r A d
        }
        // 遍历set集合 :不支持



        /**  增强for  **/
        // 遍历数组
        for(int i:arr){
            System.out.print(i+" ");  // 打印结果:1 2 3 4 5 6 7 8 9 10
        }
        System.out.println();
        // 关心列表中数据的类型,所以如果不一致的时候,需要使用Objetc,否则报错

        for(Object o:list1){
            System.out.print(o+" ");    // 打印结果:abc 123 a true [I@677327b6
        }
        System.out.println();
        // 遍历字符串,需要将字符串转成字符数组才可以遍历
        for(char c: str.toCharArray()){ // 可以将字符串转换成列表,然后用增强for遍历
            System.out.print(c+" ");    // 打印结果:h e l l o W o r l d
        }
        System.out.println();
        // 遍历set集合
        for(Object o:set){
            System.out.print(o+" ");    // 打印结果:1 b c java 100 true
        }

        /** forEach**/
        // 遍历数组:不支持
        // 遍历列表
        list1.forEach(item ->{
            System.out.print(item+" ");     // 打印结果:abc 123 a true [I@3d075dc0
        });
        System.out.println();
        // 遍历字符串:不支持
        // 遍历set
        set.forEach(item ->{
             System.out.print(item+" ");     // 打印结果:1 b c java 100 true
        });

         /** Iterator**/
         // 遍历数组:需要将数组转为可以迭代的列表
        Iterator iterator = Arrays.stream(arr).iterator();  // 注意:Arrays.toList(arr).iterator() 打印出来不可迭代
        while(iterator.hasNext()){
            System.out.print(iterator.next()+" ");  // 打印结果: 1 2 3 4 5 6 7 8 9 10
        }
        System.out.println();
        // 遍历列表
        Iterator iterator1 = list1.iterator();
        while(iterator1.hasNext()){
            System.out.print(iterator1.next()+" ");  // 打印结果:abc 123 a true [I@677327b6
        }
        System.out.println();
        // 遍历字符串:不支持。但是可以先将字符串转为char[] 数组,然后转为列表,再迭代的间接方式
        // 遍历集合
        Iterator iterator2 = set.iterator();
        while(iterator2.hasNext()){
            System.out.print(iterator2.next()+" ");  // 打印结果:1 b c java 100 true
        }
    }
}

  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值