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

cbj*_*777 3 java generics binary-tree iterator

我正在研究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()+")");
    }
}
Run Code Online (Sandbox Code Playgroud)

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

我还需要在我的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)
    ...
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是编译器错误说" > expected"导致其他编译器错误(" <identifier expected>"等).根据我的理解,它很窒息, <Pair<K,T>>但我不明白为什么.我假设这是我在某处使用泛型的错误,但我不完全确定在哪里看.

我很抱歉,如果我提供的内容过于模糊,但我在其他地方的实现中没有遇到任何问题,但在Iterator的实现中.

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

Jon*_*eet 5

问题是您尝试使BSTMapIter通用的方式.它需要在两个类型参数中是通用的,K并且T.该Pair部分是无关紧要的,在这一点上.(当涉及它实现的接口时,这很重要.)所以声明应该是:

private class BSTMapIter<K,T> implements Iterator<Pair<K,T>>
Run Code Online (Sandbox Code Playgroud)

但是,如果您希望BSTMapIter 本身具有通用性,那就是这样.如果这是一个已经将K和T作为类型参数的类型中的嵌套类,您可能只需要:

private class BSTMapIter implements Iterator<Pair<K,T>>
Run Code Online (Sandbox Code Playgroud)

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

// 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);
}
Run Code Online (Sandbox Code Playgroud)