2011-06-15 18 views
6

Bağlı listeler kullanarak sıralanmış bir liste uyguluyorum. Benim düğümü sınıfının ben compareTo() yöntemleri ve uygulamaya dayanır jenerik nesneleri karşılaştırmak gerekir eklenti yöntemi var sıralanmış liste sınıfında buBağlantılı bir listedeki genel düğümler Karşılaştırılabilir kullanılarak nasıl karşılaştırılır?

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

benziyor ama bu sözdizimi hatayı "olsun methodToTo (E), E tipi için tanımsızdır ". Düğümde compareTo yöntemini denemeyi denedim, ancak nesnenin yöntemlerini arayamıyorum, çünkü E genel türdür. İşte bitmemiş eklenti (E elem) yöntemidir.

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 

     } 
} 

Burada karşılaştırılabilir için compareTo yöntemini

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

Teşekkür adamlar deneyin. Şimdi bu değişiklikleri yaptıktan sonra, ben bu hatayı olsun: Bu hattında Düğüm temp "Bound uyuşmazlığı E tipi sınırlı parametre için geçerli bir yerini tutmaz tip \t Düğüm ait uzanır>" = yeni Düğüm (); temp.elem = elem; – hash

cevap

6

Bağlanmış E implemnting öğelerden biridir:

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

Artık derlenir.

+0

Hmmm ... bir şekilde tanıdık geliyor;) – Waldheinz

3

Genel E, E extends Comparable<E> olmalıdır. Bu şekilde compareTo(E other) yöntemine erişebilirsiniz. Ancak, bu arayüzü uygulamayan öğeler ekleyemezsiniz.

3

Eğer karşılaştırılabilir olmasını düğümler saklanan unsurları istiyorsanız, bu kullanarak jenerik ifade edebiliriz: güvenle çağrı böylece her E, Comparable arabirimini uygulaması,

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

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

buna emin ol bu şekilde compareTo yöntemi.

+0

Hmmm ... bir şekilde tanıdık geliyor :) – Bohemian

+0

Hasta sınıfının bir arabirim olarak Düğüm uygulamasını uygulaması gerektiği anlamına mı geliyor? – hash

+1

Yalnızca "Karşılaştırılabilir " arayüzünü uygulamak zorundadır, yani "compareTo (Patient other)" yöntemini uygulamanız gerekir. – Waldheinz

2

karşılaştırılabilir ipucu

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