栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java 中对容器的迭代

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 中对容器的迭代


迭代接口

不管是哪一种容器的实现类,都会用到对每个元素的遍历。 遍历最方便的办法,当然是用自带的迭代器了。

在 main 函数里输入 Iterator iter,就会导入 util 包下的这个 Iterator, import java.util.Iterator; 然后鼠标放在 Iterator 上,长按 command 键,就可以进入迭代接口的源码。 接着,熟悉的 command+7,打开结构视图,如下:

可以看到有 Iterator 接口定义了 4 个方法:

  • hasNext() 有没有下一个,有就是 true,没有就 false;
  • next() 和上面的 hasNext(),一起搭配使用,就是返回下一个;
  • forEachRemaining() 从源码内容看,有一个 while 循环,只要hasNext()返回的结果为 true,就执行 next;
default void forEachRemaining(Consumer action) {
    Objects.requireNonNull(action);
    while (hasNext())
        action.accept(next());
}
复制代码
  • remove()和遍历时删除元素有关。
default void remove() {
    throw new UnsupportedOperationException("remove");
}
复制代码
举个栗子 遍历 List
public class TestIterator {

    public static void main(String[] args) {
        TestIteratorList();
    }

    public static void TestIteratorList() {
        List list = new ArrayList<>();
        list.add("今天");
        list.add("是");
        list.add("冬至");

        // 使用迭代器遍历 list
        for(Iterator iter=list.iterator();iter.hasNext();) {
            String temp = iter.next(); //返回当前内容,且游标指向下一个
            System.out.println(temp);
        }
    }
}
复制代码

运行结果:

注意,它不像是增强 for 循环,而是像普通的 for 循环一样,用分号隔开。 同时,关注到变化的地方,最后循环的处理不写。

我们把对 游标的移动,放在循环体中去做 next() 及打印操作。

遍历 Set 同理
public static void TestIteratorSet() {
    Set lunch = new HashSet<>();
    lunch.add("螺蛳粉");
    lunch.add("毛肚火锅");
    lunch.add("部队火锅");
    lunch.add("过桥米线");

    for(Iterator iterator = lunch.iterator();iterator.hasNext();){
        String temp = iterator.next();
        System.out.println(temp);
    }
}
复制代码

相应的更改一下 main 函数里调的方法名,运行结果:

遍历 Map,略有不同

多了一步操作,把一个个位置上的都放到 Set 里:

public static void TestIteratorMap() {
    Map students = new HashMap<>();
    students.put(1,"Harry");
    students.put(2,"Hermione");
    students.put(3,"Ron");

    // 注意变化
    Set> set = students.entrySet(); // Set 里面放 Entry

    for(Iterator> iterator = set.iterator(); iterator.hasNext();) {
        Map.Entry temp = iterator.next();
        System.out.println(temp.getKey() + ": " + temp.getValue());
    }
}
复制代码

运行结果:

温故

前面学过的 List 类为例,继承了 Collection 接口:

再进到 Collection 接口里,诶~!就会发现这个接口继承了 Iterable 接口:

再走一步,就会发现 Iterable,通过 Iterator iterator();获得了一个迭代器对象:

自然就回到了上一块内容所说的,Iterator 定义了迭代器要实现的方法。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/446185.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号