2012-11-09 73 views
0

我需要在二叉搜索樹上編寫一個有序集,問題是,我不知道如何使用抽象類型並比較上下文中的這兩個對象,因爲我需要有我自己的比較聲明。通用模板ADT傻瓜

我到目前爲止,但不知何故,我卡住了,因爲可比較類型我認爲是由於我自己的比較方法而不存在的問題。

靜態節點類:

static class BinaryNode<ElementType> { 
    ElementType element; 
    BinaryNode <ElementType> right; 
    BinaryNode <ElementType> left; 

    public BinaryNode(ElementType elm) { 
     ElementType element = elm; 
     right=left=null; 
    } 
} 

方法,例如,我會感到困惑:

private BinaryNode find(ElementType x, BinaryNode t) { 
     while(t != null) { 
      if(x.compareTo(t.element) < 0) 
       t = t.left; 
      else if(x.compareTo(t.element) > 0) // is done with overrite of the comparable method, any Ideas please? 
       t = t.right; 
      else 
       return t; // Match 
     } 

     return null;   // Not found 
    } 
+0

你的問題是什麼? –

+0

我怎樣才能讓java像ElementType一樣在函數中使用聲明的通用合作伙伴 –

+0

ElementType是什麼聲明?你提到的這個「聲明的比較器」是什麼? –

回答

0

您需要使用通配符

class BinaryTree <ElementType extends Comparable<ElementType>> { 
    private class BinaryNode <ElementType extends Comparable<ElementType>> { 
      BinaryNode<ElementType> left,right; 
      ElementType value; 
      public BinaryNode(ElementType value, BinaryNode<ElementType> left , BinaryNode<ElementType> right) { 
        this.value = value; 
        this.left = left; 
        this.right = right; 
      } 
    } 
} 

我也相信,你實際上可以忽略內部類BinaryNode中的泛型類型參數。

+0

沒有發現它,'ound不匹配:類型ElementType不是一個有效的替代有界參數> of類型BinarySearchTree .BinaryNode \t構造函數BinarySearchTree.BinaryNode(ElementType)未定義 –