【问题标题】:Java Array Tree IteratorJava 数组树迭代器
【发布时间】:2011-04-23 14:13:19
【问题描述】:

我正在尝试编写一个使用数组实现树的类,我需要一些帮助来编写一个迭代器方法,该方法返回存储在树中的元素的迭代器。

解决方案:

public Iterator<E> iterator() {
    return new Iterator<E>() {
        private int index = 0;

        public boolean hasNext() {
            return index < ArrayTree.this.size();
        }

        public E next() {
           if (!hasNext()) {
               return new NoSuchElementException();
           }
           return ArrayTree.this.tree[index++];
        }

        public void remove() {
            return new OperationNotSupported();
        }
    }
}

【问题讨论】:

  • 究竟需要迭代什么?给定某个节点,你想遍历它的直接后代还是 all 后代?前者琐碎,后者有点复杂。
  • 迭代顺序应该是什么?无论如何,有人如何将节点添加到您的 ArrayTree 类中?
  • 关于您的previous question:如果您发现答案有帮助(您似乎确实做到了,因为您发布(并收到了)8 个后续问题的答案),您应该投票而不是投票删除整个问题和答案。

标签: java tree iterator


【解决方案1】:

如果不仔细检查您的实现,一个非常简单的实现可能是

public Iterator<E> iterator() {
    return new Iterator<E>() {
        private int index = 0;

        public boolean hasNext() {
            return index < ArrayTree.this.size();
        }

        public E next() {
           if (!hasNext()) {
               return new NoSuchElementException();
           }
           return ArrayTree.this.tree[index++];
        }

        public void remove() {
            return new OperationNotSupported();
        }
    }
}

【讨论】:

    【解决方案2】:

    有几种方法可以走,但是如果您的 ArrayTree 类实现了 Iterable 和 Iterator 接口,那么您就可以了。

    【讨论】:

    • 这不是答案,是吗?他仍然需要在iterator() 方法中实现迭代逻辑。简单地将班级标记为implements Iterable 并没有帮助
    • 这是一个答案。这是家庭作业。他需要尝试。当他按照我的建议去做时,他会看到一些必须实施的方法,也许灯会亮起。否则,他可以提出更具体的问题。
    猜你喜欢
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-28
    相关资源
    最近更新 更多