2012-09-02 48 views
3

即時通訊工作與集合,我無法弄清楚這一點...我想重寫compareTO()方法基於Node中的「數據」變量..所以,我可以調用collection.sort()到ArrayList排序..與泛型和集合執行compareTo()

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

    public E data; 
    public Node<E> next; 

    public Node(){ 
     data=null; 
     next=null; 
    } 

    public Node(E data1){ 
     data=data1; 
    } 

    public E getData(){ 
     return data;   
    } 

    public Node<E> getNext(){ 
     return next;   
    } 

    @Override 
    public int compareTo(E o) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 
} 

而且

public class Test { 
    public static void main(String args[]){ 
     ArrayList<Node> arr= new ArrayList<Node>(); 
     Node n1=new Node(1); 
     Node n2=new Node(3); 
     Node n3=new Node(4); 
     Node n4=new Node(3); 
     Node n5=new Node(6); 
     Node n6=new Node(2); 
     arr.add(n1); 
     arr.add(n2); 
     arr.add(n3); 
     arr.add(n4); 
     arr.add(n5); 
     arr.add(n6); 

     Collections.sort(arr); 
    } 
} 

回答

0

基本上您的收藏的E元素也必須相媲美,這可以通過以下方式來實施:

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

現在compareTo()你只是比較你的元素:

@Override 
public int compareTo(Node o) { 
    return data.compareTo(o.data); 
} 

如果您Node類接受null數據元素,compareTo()必須更認真落實。

3

您的聲明對我來說很奇怪。比較一個Node<Integer>與一個Integer會比較奇怪 - 比較一個Node<Integer>與另一個Node<Integer>比較它們中的整數會更有意義。

然後您需要約束E,以便您可以比較兩個數據值。

所以我懷疑想:

public class Node<E extends Comparable<E>> implements Comparable<Node<E>> { 
    ... 
    public int compareTo(Node<E> node) { 
     return data.compareTo(node.data); 
    } 
} 

你能做出這樣稍微的複雜性爲代價靈活,就像這樣:

public class Node<E extends Comparable<? super E>> implements Comparable<Node<E>> 

(代碼的機構將保持不變。 ..)

0

你在做什麼基本上委託Node比較運行時間類型E,所以E本身也應執行Comparable。所以我覺得你的意思是:

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

    private E data; 

    @Override 
    public int compareTo(Node<E> arg0) {   
     return arg0.data.compareTo(data); 
    } 

} 

還要注意的是,你應該比較Node對象Node對象,而不是Node對象E對象。

附註:您的班級成員應該是私人的。你甚至有吸氣,爲什麼他們公開?