java中声明可迭代接口-Iterable

Iterable

Iterable adj.可迭代的 。

以下几点是了解Iterable接口需要注意的

  • 实现这个接口的对象,允许使用 for-each loop语法。
  • 由于Collection接口继承Iterable接口,因此所有实现了Collection的实现类都实现了Iterable接口。

image.png

接口方法说明

    // 返回一个指定类型的迭代器
    Iterator<T> iterator();
    // 遍历迭代器,对每个元素执行指定操作(JDk1.8)
    default void forEach(Consumer<? super T> action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }
    }
    //返回拆分的迭代器(JDk1.8)
    default Spliterator<T> spliterator() {
        return Spliterators.spliteratorUnknownSize(iterator(), 0);
    }

Iterator

Iterator 美 /ɪtə’retɚ/ n. 迭代器;迭代程序

了解Iterable接口必不可少需要了解Iterator接口

image.png

接口方法说明

    //判断迭代器是否包含更多元素
    boolean hasNext();
    //返回迭代器下一个元素
    E next();
    //删除迭代器返回的最后一个元素
    default void remove() {
        throw new UnsupportedOperationException("remove");
    }
    //对剩余所有元素执行指定操作
    default void forEachRemaining(Consumer<? super E> action) {
        Objects.requireNonNull(action);
        while (hasNext())
            action.accept(next());
    }

这边以基于数组的集合为例,画图展示下Iterator执行next()的操作
image.png

判断是否有下个节点hasNext()

image.png

迭代器的使用

以Set为例,测试迭代器使用

public class Test {
    public static void main(String[] args) {
        Set<Integer> set = new HashSet<>();
        set.add(1);
        set.add(2);
        set.add(3);
        //原数组输出
        System.out.println(Arrays.toString(set.toArray()));
        //迭代输出
        Iterator<Integer> iterator = set.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
        //重新获取迭代器,这里要注意,每个迭代器只用使用一次。因为当迭代器遍历一遍之后,迭代器是指向最后一个元素,继续调用hasNext()返回为false
        iterator = set.iterator();
        //forEachRemaining (要求jdk1.8)
        iterator.forEachRemaining(i -> System.out.println("i=" + i));
    }
}

输出结果:

[1, 2, 3]
1
2
3
i=1
i=2
i=3

这边需要注意的是,迭代器每次使用完后不能再继续使用。以上的测试代码中之所以可以遍历两遍,是因为中间使用iterator = set.iterator();再次获取set的迭代器。

原文链接:java中声明可迭代接口-Iterable
欢迎关注:码头码农
欢迎关注微信公众号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值