Beispiel für TreeSet mit Comparable in Java
Das erste Beispiel unten zeigt einen Fehler, der auftritt, wenn ein Objekt zu einer Liste vom Typ Set hinzugefügt wird. In einem Set muss jedes Element eindeutig sein, weshalb ein Objekt im Vergleich zu den Objekten in TreeSet, bevor es eingefügt wurde.Schauen wir uns zunächst den folgenden Code an, der drei "Point"-Objekte erstellt und sie zu TreeSet hinzufügt.
import java.util.TreeSet;Kompilierung und Ausführung gibt folgendes Ergebnis zurück:
class Punkt {
int x,y;
public Point(int x, int y){
this.x = x;
this.y = y;
}
}
public class ImpComparableWrong {
public static void main(String[] args) {
TreeSetd = new TreeSet ();
d.add(neuer Punkt(2,4));
d.add(neuer Punkt(1,7));
d.add(neuer Punkt(5,3));
System.out.println(d.size());
}
}
Ausnahme im Thread "main" java.lang.ClassCastException: TreeSet.Point kann nicht in java.lang.ComparableDer Grund dafür ist, dass die Point-Klasse die Schnittstelle implementieren muss Comparable damit das TreeSet Point-Objekte aufnehmen kann. Das hinzugefügte Objekt kann nicht mit den Elementen in TreeSet verglichen werden, die Methode add() löst eine Ausnahme aus ClassCastException. Um ein Objekt vergleichbar zu machen, müssen Sie die Comparable.
bei java.util.TreeMap.compare(Unbekannte Quelle)
bei java.util.TreeMap.put(Unbekannte Quelle)
bei java.util.TreeSet.add(Unbekannte Quelle)
bei TreeSet.Comparable.main(Comparable.java:17)
Der folgende Code korrigiert diesen Fehler, indem er die Schnittstelle Comparable implementiert:
import java.util.Iterator;Dieses Programm gibt folgendes Ergebnis aus:
import java.util.TreeSet;
class Point implementiert Comparable{
int x,y;
public Point(int x, int y){
this.x = x;
this.y = y;
}
public int compareTo(Point p) {
double dp2 = (double) Math.sqrt(Math.pow(p.x,2) + Math.pow(p.y,2));
double dp = (doppelt) Math.sqrt(Math.pow(x,2) + Math.pow(y,2));
if(dp > dp2)
return 1;
else
return 0;
}
}
public class Comparabletest {
public static void main(String[] args) {
TreeSettset = new TreeSet ();
tset.add(neuer Punkt(2,4));
tset.add(neuer Punkt(1,7));
Punkt a = neuer Punkt(2,5);
Iteratoriterator = tset.iterator();
while(iterator.hasNext()){
Punkt p = iterator.next();
System.out.print(p.x +", "+ p.y);
System.out.println(" | p > a: "+p.compareTo(a));
}
}
}
2, 4 | p > A: 0References:
1, 7 | p > a: 1
Javadoc: TreeSet class