首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Java Collection(7)——Iterable接口

Java Collection(7)——Iterable接口

作者头像
用户11873138
发布2026-01-13 21:24:33
发布2026-01-13 21:24:33
490
举报

1.Iterator接口

1.1 Iterator接口和其他集合类的关系

在这里插入图片描述
在这里插入图片描述

Java集合类中,Iterable接口属于顶层接口,除Map接口外,其他都实现了Iterable接口,这意味着它们都可以重写使用Iterable接口中的方法

1.2 Iterable接口简介

JDK1.7以前,Iterable接口内部只定义了iterator()方法。然而在JDK1.8及以后,又新增了forEach()和spliterator()方法

1.2.1 iterator()

作用:iterator()方法用于返回一个Iterator对象,该对象是一个接口,用于遍历Iterable集合中的元素。Iterator中的方法是实现Iterable遍历功能的核心方法

(1)boolean hasNext():判断集合中是否有还有下一个元素 (2)E next():返回集合中的下一个元素

在这里插入图片描述
在这里插入图片描述

list.iterator()表示返回一个Iterator对象指向list,以下可以看作是遍历过程

在这里插入图片描述
在这里插入图片描述

(3)default void remove():移除集合中上一次调用next()返回的元素 remove()方法可以在遍历过程中调用,这表示遍历和修改元素的操作可以同步进行

在这里插入图片描述
在这里插入图片描述

在JDK1.8及以后,Iterator中又新添了default void forEachRemaining(Consumer<? super E> action)方法。该方法会按顺序对迭代器中的剩余的每个元素进行特定的操作

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        Iterator<Integer> iterator = list.iterator();
        //重写Consumer对象中的accept方法,该方法内部可以对遍历的元素进行执行的操作
        //lambda表达式
       iterator.forEachRemaining(integer -> {
           integer += 1;
           System.out.println(integer);
       });
}
1.2.2 forEach()&foreach()

(1)Iterable接口中的forEach()方法实际上和上述forEachRemaining差不多,该方法会按顺序对遍历的每个元素进行特定的操作

在这里插入图片描述
在这里插入图片描述

我这里forEach方法只是对遍历的元素进行打印,如果想和上述forEachRemaining一样,先+1再打印,也是可以做到的

在这里插入图片描述
在这里插入图片描述

(2)foreach又叫做增强型for循环,是一种语法糖,就是一种语法形式(规定吧)。它在内部实际上使用了Iterator来实现遍历,调用iterator()方法来获取迭代器,然后使用hasNext()和next()来遍历集合

在这里插入图片描述
在这里插入图片描述

foreach和迭代器的区别? 答:迭代器可以在遍历过程中使用remove()方法来删除元素,并且该删除操作是可以映射到集合本身的;但是foreach方法不行

1.2.3 spliterator()方法

作用:用于返回Spliterator对象,该对象是一个接口,用于遍历Iterable集合中的元素。和Iterator对象最大的区别是,使用Spliterator对象中的方法来遍历集合支持并行处理,这在多线程环境下性能高于使用Iterator来遍历(但是Spliterator不能保证线程安全性)

(1)boolean tryAdvance(Consumer<? super T> action):处理当前元素,并移动到下一个元素(类似Iterator中的next方法) (2)Spliterator trySplit():将当前需要遍历的集合拆分为两个部分,返回一个新的Spliterator对象用于处理前半部分,剩下一般由原Spliterator处理

以ArrayList为例:

代码语言:javascript
复制
public class ArrayListParallelSpliteratorExample {
    public static void main(String[] args) {
        // 创建一个包含整数的 ArrayList
        List<Integer> numbers = new ArrayList<>();
        for (int i = 1; i <= 20; i++) {
            numbers.add(i);
        }
        
        // 获取 ArrayList 的 spliteratorOne
        Spliterator<Integer> spliteratorOne = numbers.spliterator();
        // 使用 trySplit() 方法拆分 spliteratorTwo
        Spliterator<Integer> spliteratorTwo = spliteratorOne.trySplit();
        
        // 定义一个处理元素的 Consumer
        java.util.function.Consumer<Integer> action = (Integer number) ->
                System.out.println("当前线程: " + Thread.currentThread().getName() + " 处理数字: " + number);
        // 使用第一个 Spliterator 进行遍历
        /*System.out.println("使用第一个 Spliterator 进行遍历:");
        spliteratorOne.forEachRemaining(action);
        // 使用拆分后的 Spliterator 进行遍历
        System.out.println("\n使用拆分后的 Spliterator 进行遍历:");
        if (spliteratorTwo != null) {
            spliteratorTwo.forEachRemaining(action);
        }*/
        //
        ThreadPoolExecutor executor = new ThreadPoolExecutor(2,2,0,
                TimeUnit.MINUTES,
                new ArrayBlockingQueue<>(1),
                Executors.defaultThreadFactory(),
                new ThreadPoolExecutor.AbortPolicy());
        for (int i = 0; i < 2; i++) {
            executor.execute(() -> {
                spliteratorOne.forEachRemaining(action);
                spliteratorTwo.forEachRemaining(action);
            });
        }
    }
}

运行结果:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.Iterator接口
    • 1.1 Iterator接口和其他集合类的关系
    • 1.2 Iterable接口简介
      • 1.2.1 iterator()
      • 1.2.2 forEach()&foreach()
      • 1.2.3 spliterator()方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档