2009-12-14 69 views
3

我正在学习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()+")"); 
    } 
} 

对与与第一部分是关键,第二个是与该键关联的值的两个不同的仿制药associtated。

我还需要在BST类中实现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>>,但我不知道为什么。我认为这是我在某处使用泛型所犯的错误,但我不完全确定在哪里寻找。

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

谁能告诉我我在做什么错在这里? 如果需要任何进一步的信息,让我知道,我会尽我所能提供:)

回答

5

问题是你试图使BSTMapIter通用的方式。它需要通用于两种类型参数KT。在这一点上,Pair部分是无关紧要的。 (这一点很重要,当涉及到什么接口它实现虽然)。所以,声明应该是:

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); 
}