Java筑基—iterator迭代器和forEach

在这里插入图片描述


一、迭代器概念

Java中的迭代器是一种用于遍历集合类中元素的接口。迭代器提供了一种统一的方式来遍历不同类型的集合类,例如List、Set和Map。使用迭代器可以依次访问集合中的每个元素,并对其进行操作。
在Java中,所有实现了Iterable接口的集合类都可以使用迭代器来遍历元素。迭代器提供了以下方法来实现遍历集合:
hasNext()方法:判断当前是否还有元素可以遍历。
next()方法:返回下一个元素并将迭代器的位置向后移动一个位置。
remove()方法:删除当前遍历的元素。

1、代码展示

package com.company.collection;

import java.util.Iterator;
import java.util.ArrayList;
import java.util.Collection;

public class CollectionPrint {
    public static void main(String[] args) {
        Collection c1 = new ArrayList();
        c1.add("hello");
        c1.add(66);
        c1.add(88);
        c1.add(77);
        c1.add("study");

        //直接调用toString方法,对应的c1就是一个字符串打印出来  String类型的整体
        System.out.println("c1:" + c1);//c1:[hello, 66, 88, 77, study]

        //第二种:用迭代器判断打印
        //2.遍历方式二:使用迭代器来遍历集合中的所有元素  更加灵活
        // 获取当前集合中的迭代器对象
        Iterator iterator = c1.iterator();
        // 判断是否有元素可以访问
        System.out.println(iterator.hasNext());//true
        // 取出下一个
        System.out.println(iterator.next());//hello
        // 判断是否有元素可以访问
        System.out.println(iterator.hasNext());//true
        // 取出下一个
        System.out.println(iterator.next());//66
        // 判断是否有元素可以访问
        System.out.println(iterator.hasNext());//true
        // 取出下一个
        //编译OK,运行发生NoSuchElementException 没有元素异常
//        System.out.println(iterator.next());//NoSuchElementException

        System.out.println("--------------------------------------");
        //循环 while
        while (iterator.hasNext()) {
            System.out.println(iterator.next());   //88 77 study
        }
        System.out.println("无数据");    
        System.out.println("--------------------------------------");
        Iterator iterator1 = c1.iterator();
        while (iterator1.hasNext()) {
            System.out.println(iterator1.next());    // hello 66 88 77 study
        }
        System.out.println("-----------------toString---------------------");

        StringBuilder stringBuilder = new StringBuilder();
        Iterator iterator2 = c1.iterator();
        stringBuilder.append("[");
        while (iterator2.hasNext()) {
            Object next = iterator2.next();
            if (!iterator2.hasNext()) {
                //最后一个对象元素
                stringBuilder.append(next).append("]");
            } else {
                stringBuilder.append(next).append(",").append(" ");
            }
        }
        System.out.println(stringBuilder);    //[hello, 66, 88, 77, study]


        System.out.println("-----------------迭代器删除元素对象---------------------");
        Iterator iterator3 = c1.iterator();
        while (iterator3.hasNext()) {
            Object next = iterator3.next();
            if ("study".equals(next)) {
                //迭代器删除元素
                iterator3.remove();

            }
        }
        System.out.println(c1);    // [hello, 66, 88, 77]

    }

}

执行结果:

c1:[hello, 66, 88, 77, study]
true
hello
true
66
true
--------------------------------------
88
77
study
无数据
--------------------------------------
hello
66
88
77
study
-----------------toString---------------------
[hello, 66, 88, 77, study]
-----------------迭代器删除元素对象---------------------
[hello, 66, 88, 77]

Process finished with exit code 0


二、forEach概念

1、语法格式

元素类型:数组、集合中的元素/对象的类型
变量名:随便起名称即可
数组/集合名称:要遍历的数组/集合的名称
循环体:对应循环的时候业务逻辑

for(元素类型 变量名 : 数组/集合名称){
	循环体;
}

2、案例

package com.company.collection;

import java.util.ArrayList;
import java.util.Collection;

public class ForEachDemo {
    public static void main(String[] args) {
        Collection c1 = new ArrayList();
        //String
        c1.add(new String("hello"));
        c1.add("hello");
        //Integer
        c1.add(Integer.valueOf(77));
        c1.add(88);
        c1.add(new Person("kobe",24));
        System.out.println("集合c1:"+c1);

        for(Object obj:c1){
            System.out.println("c1集合对象是:"+obj);
        }

        int[] arr = new int[]{22,33,44,55};
        for (int i:arr){
            System.out.println("数组内容:"+i);
        }

    }
}

结果

集合c1:[hello, hello, 77, 88, Person{name='kobe', age=24}]
c1集合对象是:hello
c1集合对象是:hello
c1集合对象是:77
c1集合对象是:88
c1集合对象是:Person{name='kobe', age=24}
数组内容:22
数组内容:33
数组内容:44
数组内容:55

Process finished with exit code 0


在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码敲到头发茂密

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值