java基础 之 常用遍历方法

发布于:2024-08-22 ⋅ 阅读:(132) ⋅ 点赞:(0)

准备工作

准备工作:我们需要创建一个数组,两个列表,一个字符串和一个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
        }
    }
}


网站公告

今日签到

点亮在社区的每一天
去签到