gpt4 book ai didi

java - 可迭代是如何工作的?

转载 作者:行者123 更新时间:2023-12-02 05:24:55 26 4
gpt4 key购买 nike

嘿伙计们,我一直在自学 Java,并且正在做这项作业。 http://ljing.org/games/focus/

所以我从头开始写了一个Linked list,我使用LinkedList类写了一个Deque类但是!

关于迭代器类,我只有一个问题不明白。我只是不明白 Class Deque Iterator 应该做什么。

另外,我的代码中有这个:

class Deque<Item> implements Iterable<Item>.

但是编译器提示在我的 Deque 类中我需要重写一个方法

@Override
public Iterator<Item> iterator()
{
throw new UnsupportedOperationException("Not supported yet.");
}

但我不明白为什么

最佳答案

Java 中有两个重要的不同接口(interface)用于迭代, IterableIterator 。它们各自有不同的目的。

可迭代

当某个东西实现了这个接口(interface)时,这意味着它可以被迭代。这对我们很有用,因为 Java 为我们提供了一种使用 for-each 循环迭代实现 Iterable 的快捷方式:

List<String> elements = ... ; // List is an instance of Iterable
for (String element : elements)
System.out.println(element);

任何 Iterable 的实例都可以在 for-each 循环中使用。如果您有自己的自定义 MyDeque 类来实现 Iterable,那么您也可以在 for-each 中使用它:

MyDeque<String> elements = ... ;
for (String element : elements)
System.out.println(element);

这让我们...

迭代器

这个接口(interface)是迭代实际执行的方式。 for-each 循环编译为如下所示:

MyDeque<String> elements = ... ;
for (Iterator<String> $iter = elements.iterator(); $iter.hasNext();) {
String element = $iter.next();
System.out.println(element);
}

这段代码在功能上等同于上面的for-each。 hasNext() 是继续条件(我还有更多东西可以给你吗?),而 next() 实际上给你下一个元素,或者抛出一个 NoSuchElementException 如果我们没有别的东西的话。

使自定义双端队列实现Iterable的目的只是为了让您可以使用for循环之类的东西迭代双端队列中的元素。它的 Iterator 实现可以让您实际执行迭代。

关于java - 可迭代是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26147586/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com