gpt4 book ai didi

java - 二叉搜索树实现中迭代器和泛型的困难

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:58:55 28 4
gpt4 key购买 nike

我正在学习 Java 中的数据结构,但在二叉搜索树中使用泛型时遇到困难。

对于我们的作业,我们将使用包含父节点、左节点和右节点以及数据值的节点来实现二叉搜索树。

我们案例中的数据值采用 Pair 对象的形式。这是它的样子:

public class Pair<A,B> {

public final A fst;
public final B snd;

public Pair(A x, B y) {
fst = x; snd = y;
}

public String toString() {
return new String("("+fst.toString()+", "+snd.toString()+")");
}
}

Pair 与两个不同的泛型相关联,第一部分是键,第二部分是与该键相关联的值。

我还需要在我的 BST 类中实现 Iterator。我在一个看起来像这样的内部类中实现 Iterator:

public Iterator<Pair<K,T>> iterator() {
return new BSTMapIter<Pair<K,T>>(this.root, this.size, this.order);
}

private class BSTMapIter<Pair<K,T>> implements Iterator<Pair<K,T>> { <=== Compiler error "> expected"
...
... (Implementation here)
...
}

我遇到的问题是编译器错误“> expected”,它会导致其他编译器错误(“<identifier expected>”等)。据我了解,它正在窒息 <Pair<K,T>>但我不知道为什么。我假设这是我在某处使用泛型时犯的一个错误,但我不完全确定去哪里找。

如果我提供的内容过于模糊,我深表歉意,但我在其他任何地方的实现中都没有遇到任何问题,除了这里的迭代器实现。

谁能告诉我我做错了什么???如果需要任何进一步的信息,请告诉我,我会尽力提供:)

最佳答案

问题在于您尝试使 BSTMapIter 通用的方式。它需要在两个类型参数KT 中是泛型的。 Pair 部分此时无关紧要。 (尽管它实现的接口(interface)很重要。)所以声明应该是:

private class BSTMapIter<K,T> implements Iterator<Pair<K,T>>

但是,如果您希望 BSTMapIter 本身 是通用的。如果这是已经将 K 和 T 作为类型参数的类型中的嵌套类,您可能只需要:

private class BSTMapIter implements Iterator<Pair<K,T>>

您还想以稍微不同的方式实例化它:

// When it's an inner class
public Iterator<Pair<K,T>> iterator() {
return new BSTMapIter(this.root, this.size, this.order);
}

// When it's a standalone generic class
public Iterator<Pair<K,T>> iterator() {
return new BSTMapIter<K, T>(this.root, this.size, this.order);
}

关于java - 二叉搜索树实现中迭代器和泛型的困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1899592/

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