gpt4 book ai didi

java - 创建自定义迭代器 Java?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:06:10 24 4
gpt4 key购买 nike

我对如何在 Java 中为类实现自定义迭代器感到有点困惑。我需要在不使用我已经可用的内置库的情况下制作一个 ArrayList。我了解创建类的基础知识,但我无法理解如何让 Iterator 适应所有这些。我有以下内容:

我创建了一个实现可迭代接口(interface)的通用类,它看起来像这样:

public class MyArrayList<T> implements Iterable<T> {

然后我必须创建一个名为 MyIterator 的类,根据文档的措辞,它是一个独立的类。这看起来相当简单我创建了一个名为 MyIterator 的新类并让它实现迭代器接口(interface)所以它看起来像这样:

public class MyIterator<T> implements Iterator<T>{

我的困惑在于以下几点。该文档说 Iterator 需要在它自己的类中,但是我如何访问“MyArrayList”中的数据成员以完全实现 hasNext() 和 next() 等。由于底层数组中的数据成员是私有(private)的(它们应该是私有(private)的),我看不出外部类如何完全实现这些方法。我误解了什么是必需的吗?通过单独的类,它是否仍然是“MyArrayList”类的一部分,但定义不同?

我希望这对您有所帮助,正如我所说的,我想我明白我需要什么,我只是不确定我的迭代器适合所有这些。

最佳答案

虽然迭代器必须是一个单独的类 *,但该类可能与您的 Iterable 类有某种关系。

它通常是一个嵌套/内部类,正是因为它需要访问类的值(而这正是内部类的主要用途)。

当然,如果 Iterable 是一个 List,您可以实现一个 Iterator 而根本不需要任何“内部”访问,但您通常仍然想要访问内部结构以进行诸如检查 modCount 之类的事情(当 Iterable 在结构上被修改时抛出 ConcurrentModificationException,同时迭代它... 并在您通过 Iterator 本身修改它时防止该异常)。

* 您可以使用您的Iterable 实例本身来实现它,但是一旦用户同时使用两个迭代器,这就会破坏契约。

关于java - 创建自定义迭代器 Java?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18609955/

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