迭代器的理解

1.正向遍历集合

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class IteratorExample {
    public static void main(String[] args) {
        List<String> fruits = new ArrayList<>();
        fruits.add("苹果");
        fruits.add("香蕉");
        fruits.add("橙子");

        // 获取迭代器
        Iterator<String> iterator = fruits.iterator();

        // 使用迭代器遍历集合
        while (iterator.hasNext()) {
            String fruit = iterator.next();
            System.out.println(fruit);
        }
    }
}

这部分代码定义了一个名为IteratorExample的类,并在main方法中进行了以下操作:

  • 创建了一个ArrayList对象fruits,用于存储水果的名称。
  • 使用add方法将三个不同的水果名称("苹果"、"香蕉"和"橙子")添加到fruits列表中。

这行代码获取了fruits列表的迭代器。通过调用iterator()方法,这个语句返回了一个Iterator对象,它可以用于遍历fruits列表中的元素。

这部分代码使用迭代器循环遍历fruits列表。while循环在迭代器还有下一个元素时执行,通过调用hasNext()方法来判断是否还有下一个元素。如果有下一个元素,将使用next()方法获取该元素,并将其存储在名为fruit的字符串变量中。然后,使用System.out.println(fruit)语句打印出水果的名称。

循环将重复执行,直到列表中的所有元素都被遍历完毕为止。

综上所述,这段代码演示了如何使用迭代器来遍历并打印一个列表中的元素。迭代器提供了一种简便的方式来遍历集合,无需关心集合内部的数据结构。

2.反向遍历集合:除了使用hasNext()next()方法正向遍历集合元素外,还可以使用hasPrevious()previous()方法反向遍历集合元素。这需要使用ListIterator,它是Iterator的子接口,用于支持双向遍历。

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class IteratorExample {
    public static void main(String[] args) {
        List<String> fruits = new ArrayList<>();
        fruits.add("苹果");
        fruits.add("香蕉");
        fruits.add("橙子");

        // 获取列表的迭代器
        ListIterator<String> iterator = fruits.listIterator(fruits.size());

        // 反向遍历集合
        while (iterator.hasPrevious()) {
            String fruit = iterator.previous();
            System.out.println(fruit);
        }
    }
}

3.删除元素:在遍历集合时,可以使用迭代器的remove()方法删除当前遍历的元素,而不会引发并发修改异常。

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class IteratorExample {
    public static void main(String[] args) {
        List<String> fruits = new ArrayList<>();
        fruits.add("苹果");
        fruits.add("香蕉");
        fruits.add("橙子");

        // 获取迭代器
        Iterator<String> iterator = fruits.iterator();

        // 遍历集合并删除指定元素
        while (iterator.hasNext()) {
            String fruit = iterator.next();
            if (fruit.equals("香蕉")) {
                iterator.remove(); // 删除元素
            }
        }

        System.out.println(fruits); // 输出结果:[苹果, 橙子]
    }
}

这段代码,首先,创建了一个名为fruits的列表,并向其中添加了三个水果名称。

然后,通过fruits.iterator()方法获取了列表的迭代器对象,用于遍历列表中的元素。

接下来,使用while循环和iterator.hasNext()方法来判断是否还有下一个元素。在循环内部,通过iterator.next()方法获取下一个元素,并将其保存在fruit变量中。

然后,使用fruit.equals("香蕉")判断当前元素是否为"香蕉",如果是,则使用iterator.remove()方法删除该元素。

最后,输出fruits列表,可以看到"香蕉"已经被成功删除,输出结果为[苹果, 橙子]

需要注意的是,在使用迭代器遍历过程中,不能直接使用列表的remove()方法进行删除操作,而是必须使用迭代器的remove()方法。这是因为直接使用列表的remove()方法会导致并发修改异常(ConcurrentModificationException)。

这段代码通过迭代器的remove()方法可以在遍历过程中安全地删除列表中的元素。

3.遍历Map集合:使用entrySet()方法可以获取Map集合的Set视图,然后通过迭代器遍历其中的键值对。

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class IteratorExample {
    public static void main(String[] args) {
        Map<String, Integer> studentScores = new HashMap<>();
        studentScores.put("小明", 90);
        studentScores.put("小红", 85);
        studentScores.put("小刚", 95);

        // 获取Map集合的迭代器
        Iterator<Map.Entry<String, Integer>> iterator = studentScores.entrySet().iterator();

        // 遍历Map集合并打印键值对
        while (iterator.hasNext()) {
            Map.Entry<String, Integer> entry = iterator.next();
            String name = entry.getKey();
            int score = entry.getValue();
            System.out.println(name + " 的分数:" + score);
        }
    }
}

首先,创建了一个名为studentScores的HashMap对象,并向其中添加了三个学生的姓名和分数信息。

然后,通过studentScores.entrySet().iterator()方法获取了Map集合的迭代器对象,用于遍历Map集合中的键值对。

接下来,使用while循环和iterator.hasNext()方法判断是否还有下一个键值对。在循环内部,通过iterator.next()方法获取下一个键值对,并将其保存在entry变量中。entry.getKey()获取键(学生姓名),entry.getValue()获取值(学生成绩)。

然后,将学生姓名和分数打印出来,可以看到每个学生的姓名和对应的分数。

需要注意的是,使用迭代器遍历Map集合时,需要使用Map.Entry作为迭代器的泛型类型,进一步获取键和值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值