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的实现中.
谁能告诉我这里我做错了什么??? 如果需要任何进一步的信息,请告诉我,我会尽力提供:)
问题是您尝试使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)
| 归档时间: |
|
| 查看次数: |
1843 次 |
| 最近记录: |