2011-06-15 22 views
6

我正在使用鏈接列表實現一個排序列表。我的節點類看起來像這樣如何使用Comparable比較鏈表中的通用節點?

public class Node<E>{ 
    E elem; 
    Node<E> next, previous; 
} 

在排序列表類我有add方法,在這裏我需要根據其實施的compareTo()方法來比較通用的對象,但我得到這個語法錯誤 「的方法compareTo(E)對於E類型是未定義的「。我試過在Node中實現compareTo方法,但是我不能調用任何對象的方法,因爲E是泛型類型。 這裏是添加(E elem)方法的未完成體。

public void add(E elem) 
{ 

     Node<E> temp = new Node<E>(); 
     temp.elem = elem; 

     if(isEmpty()) {   
      temp.next = head; 
      head.previous = temp; 
      head = temp; 
      counter++; 
     }else{ 
      for(Node<E> cur = head; cur.next != null ; cur= cur.next) { 
       **if(temp.elem.comparTo(cur.elem)) {** 
        //do the sort; 

       }/*else{ 
        cur.previous = temp; 
       }*/    
      } 
      //else insert at the end 

     } 
} 

這裏是implemnting compareTo方法

public class Patient implements Comparable<Patient>{ 
    public int compareTo(Patient that) 
    { 
     return (this.getPriority() <= that.getPriority() ? 1 : 0); 
    } 
} 
+0

謝謝你們。現在做了這些改變之後,我得到這個錯誤 「三寸不匹配:類型E是不是有界參數的有效替代品>類型\t 節點的」 在該行 節點溫度= new Node (); temp.elem = elem; – hash 2011-06-15 10:41:08

回答

6

綁定E至可比對象之一:

public class Node<E extends Comparable<E>>{ 
    E elem; 
    Node<E> next, previous; 
} 

它現在編譯。

+0

嗯...看起來不知何故;) – Waldheinz 2011-06-15 10:25:56

3

看來你的通用E必須是E extends Comparable<E>。這樣你就可以訪問compareTo(E other)方法。但是,您將無法添加未實現此界面的元素。

3

如果你想存儲在節點中的元素是可比較的,你能說出這個使用泛型:

public class Node<E extends Comparable<E>> { 

    E elem; 
    Node<E> next, previous; 
} 

這種方式肯定的是,每一個E實現Comparable接口,這樣你就可以安全地調用compareTo方法。

+0

嗯......看起來很熟悉:) – Bohemian 2011-06-15 10:24:54

+0

這是否意味着患者類需要實現Node作爲接口? – hash 2011-06-15 10:27:05

+1

它只需要實現「Comparable 」接口,這意味着你必須實現一個「compareTo(Patient other)」方法。 – Waldheinz 2011-06-15 10:29:01

2

拉昇可比提示

public class Node<E extends Comparable<E>>{ 
    E elem; 
    Node<E> next, previous; 
}