Implementieren Von Java-Komparator
Bin ich zu schreiben versucht, einen Algorithmus, verwendet eine min-priority-queue, so dass ich schaute mich um auf google gefunden und der PriorityQueue. Es scheint, dass, um es zu verwenden, obwohl, ich werde zu müssen, um zu sagen, wie ich es will Prioritäten setzen, und dass der Weg, dies zu tun ist mit einem Komparator (ich will vergleichen die spezifischen Datenfelder von meinem "Node1" Objekte). Mehr googeln stellte die Idee der Schaffung eines neuen PCs, die Comparator implementiert, sondern überschreibt die Methode vergleichen. Was ich versuche ist diese (und andere Variationen davon):
import java.util.Comparator;
public class distComparator implements Comparator {
@Override
public int compare(Node1 x, Node1 y){
if(x.dist<y.dist){
return -1;
}
if(x.dist>y.dist){
return 1;
}
return 0;
}
}
Den compiler Proteste aus mehreren Gründen, einer davon ist, dass ich nicht über-geritten, die comparator-Klasse (die es sagt, ist abstrakte)
Fehler: distComparator is not abstract and does not override abstract Methode compare(Object,Object) im Komparator
Habe ich gewechselt es zu sagen "compare(object x, object y)", kümmert sich um das Problem. An diesem Punkt aber der compiler beschwert sich, dass es nicht finden können, das "dist" - variable in x-oder y - --was Sinn macht, denn Sie sind Teil meiner Node1-Klasse, nicht die Klasse des Objekts.
So, wie soll dies funktionieren? Es sollte Typ Object
scheinbar, aber dann wie kann ich direkt an die richtige variable?
InformationsquelleAutor der Frage Jo.P | 2013-04-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie implementieren
Comparator<Node1>
:Ohne diese, die Sie implementieren
Comparator<Object>
das ist nicht, was Sie wollen (es können arbeiten gemacht werden, aber ist die Mühe nicht Wert).Den rest des Codes in Ihre Frage ist in Ordnung, sofern
Node1
verfügt über eine Behindertengerechte Mitglied genanntdist
.Beachten Sie, dass wenn Sie mit Java 7, die den ganzen Körper der Methode ersetzt werden kann, mit
(ersetzen
Integer
mitDouble
etc, je nach Art derNode1.dist
.)InformationsquelleAutor der Antwort NPE
Wie Sie sehen können hier (JSE Komparator JavaDoc-Seite)
die
Comparator
Schnittstelle eine generische "parameter"Beschreibung der Art
für die dieser Komparator ausgelegt ist.
Die PriorityQueue ist ähnlich.
So,
wenn Sie eine
PriorityQueue<Node1>
,Sie können erstellen Sie eine
Comparator<Node1>
wie folgt:InformationsquelleAutor der Antwort vptheron