2009-12-14 71 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); 
}