Comparable

Status
Nicht offen für weitere Antworten.
J

JJ

Gast
Ich verstehe das Interface comparable nicht.

ich habe eine klasse Kunde mit Vorname, Nachname, PLZ etc. und möchte diese Objekte anhand ihres Nachnamens sortieren.

Ich weiß dass das interface comparable so aussieht:

Code:
public int compareTo (Object o);


Wie implementier ich das aber in der Klasse Kunde?

Code:
public int compareTo (Object o) {
             Kunde k = (Kunde) o
...


...??? und dann? und wieso kann ich nicht sagen Kunde o = new Kunde oder so?

wie mach ich klar dass ich die objekte nach nachname und nicht zb. plz sortieren will?


Für Hilfe wäre ich sehr dankbar!
 

Wildcard

Top Contributor
Du castest das übergebene Objekt nach Kunde, anschließend holst du dir von diesem Objekt den Nachnamen, und vergleichst ihn mit dem lokalen Nachnamen.
Eine entsprechende Zahl zurückgeben und fertig.
 
S

SlaterB

Gast
> Kunde o = new Kunde

wenn man zwei Kunden vergleichen will, welchen Sinn hat es in dieser Situation, ein neuen Kunden zu erstellen?
das ist doch Quatsch


---------

vergleichen

Beispiel 1, sortiert nach Namen:
Code:
public int compareTo (Object o) {
        Kunde k = (Kunde) o;
  return this.getName().compareTo(k.getName());

}
sollen doch die Strings comparen

------
Beispiel 2, sortiert nach Zahl:

Code:
public int compareTo (Object o) {
        Kunde k = (Kunde) o;
  return this.getZahl() - k.getZahl();

}

denn wenn die Zahlen gleich groß sind, ist die Differenz 0,
Rückgabewert 0 heißt gleich groß

ist eine Zahl größer als die andere,
dann gibt es einen positiven oder negativen Rückgabewert,
dies entsprich größer oder kleiner
 
G

Guest

Gast
Hab nun folgendes Programm

Code:
public class Testprogramm {



   public static void sortiere(Comparable data[])
   {
     boolean sorted;
     do {
       sorted = true;
     for (int i = 0; i < data.length - 1; ++i) {
         if (data[i].compareTo(data[i + 1]) > 0) {
           Comparable tmp = data[i];
           data[i] = data[i + 1];
           data[i + 1] = tmp;
           sorted = false;
         }
       }
     } while (!sorted);
   }

	public static void main(String[] args)
                  {
     
     Comparable data[]  = new Comparable[5];
     
     Kunde Kunde1 = new Kunde("Schmidt", "Helmut", "Turmstraße 3", "88748 Bochum"); 
     Kunde Kunde2 = new Kunde("Berns", "Günther", "Mauerstraße 3", "98379 Köln");
     Kunde Kunde3 = new Kunde("Reiners", "Gundula", "Krauerweg 5", "93802 Mainz"); 
     Kunde Kunde4 = new Kunde("Zens", "Andrej", "Galoppring 9", "4711 Entenhausen");
     Kunde Kunde5 = new Kunde("Anders", "Wolfgang", "Schalplatz 98", "87666 Gotham City");

     
     data[0] = Kunde1;
     data[1] = Kunde2;
     data[2] = Kunde3;
     data[3] = Kunde4;
     data[4] = Kunde5;

     
     sortiere(data);
     for (int i = 0; i < data.length; ++i) {
       System.out.println(data[i]);
     }
   }
}

und folgende implementation vom interface comparable in der klasse kunde:
Code:
public int compareTo (Object o) {
		Kunde k = (Kunde) o;
		return this.Nachname.compareTo(k.Nachname);
			}

}

nach sortiere(data) bekomme ich bei der ausgabe auf dem bildschirm:

Kunde@16930e2
Kunde@108786b
Kunde@119c082
Kunde@1add2dd
Kunde@1ee36c


Wo kommen diese komischen sachen denn nun her...??

UNd wenn ich sage "System.out.println(data.Nachname);" sagt der kompiler er kann nachname nicht finden obwohl ich diese variable in der klasse kunde deklariert hab mit public.. was soll ich tun?
 
B

Beni

Gast
a) Woher soll denn Java wissen wie ein Kunde in ein String umgewandelt wird? :wink: Jede Klasse besitzt eine Methode "toString", per Standard ist das "Klassenname@ObjektID". Überschreib die "toString"-Methode von Kunde, wenn du eine andere Ausgabe haben willst.

b) Der data-Array beinhaltet "Comparables". Der Compiler kann nicht wissen, dass während der Laufzeit Objekte vom Typ "Kunde" gespeichert sind; dementsprechend kann er den Zugriff auf ein möglicherweise nicht vorhandenes Attribut nicht erlauben. Mach doch einen Kunde-Array.
 
G

Guest

Gast
Danke vielmals! , hab einfach ein kunden array gemacht und es klapt.

nur nochaml zum verständnis:

was kann ich mir unter "comparables" vorstellen und was genau leistet das interface comparable? schließlich sortier ich doch mit der methode sortiere...was wäre wenn es comparable nicht gäbe?
 

Ark

Top Contributor
Anonymous hat gesagt.:
was kann ich mir unter "comparables" vorstellen und was genau leistet das interface comparable? schließlich sortier ich doch mit der methode sortiere...was wäre wenn es comparable nicht gäbe?
Mit dem Implementieren eines Interfaces garantierst Du, dass Deine Klasse alle Methoden implementiert, die das Interface vorschreibt. Methoden wie die Collections.sort(…) sind ja schon festgeschrieben, woher sollten sie aber wissen, wie man dieses oder jenes vegleicht? Tja, das wissen sie eben nicht, deshalb überlassen sie das Sortieren den Klassen selbst. Natürlich kann aber Collections.sort(…) nur eine Methode aufrufen, also muss es sich auch sicher sein, dass diese Methode (in unserem Fall compareTo(…)) in der Klasse existiert. Das wird eben, wie schon gesagt, durch das Interface Comparable sichergestellt: Mit der Implementierung garantierst Du, dass diese Methode auch tatsächlich existiert.

MfG
Ark
 
G

Guest

Gast
Danke für die erläuterungen...

eine kurze und letzte frage hätte ich noch.

Code:
public int compareTo (Object o) {
      Kunde k = (Kunde) o;
      return this.Nachname.compareTo(k.Nachname);
         }

}

warum schreibt man this.Nachname.compareTo(k.Nachname)? welche nachname wird hier mit welchem verglichen?
 
S

SlaterB

Gast
na der eigene (this) mit dem anderen (k),

genausogut kann man auch
k.Nachname.compareTo(this.Nachname);
schreiben,
wodurch dann die gesamte Sortierung umgekehrt wird
(aufsteigend <-> absteigend)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J HashSet mit Comparable sortieren Java Basics - Anfänger-Themen 13
J Interface Comparable<T> Java Basics - Anfänger-Themen 10
L Interface & Comparable Java Basics - Anfänger-Themen 15
I Generics und Comparable Java Basics - Anfänger-Themen 14
O Comparable Generic Java Basics - Anfänger-Themen 24
R Quicksort mit Interface Comparable Java Basics - Anfänger-Themen 6
Kornblume Comparable Interface für Objektvergleiche nutzen Java Basics - Anfänger-Themen 15
C Was macht `public class ClassName<T extends Comparable<T>>`? Java Basics - Anfänger-Themen 14
N Comparable bzw Comparator Java Basics - Anfänger-Themen 5
M Generische Liste aus Comparable-Objekten Java Basics - Anfänger-Themen 6
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
K Comparable - Objekte aus Array vergleichen und größtes auswählen Java Basics - Anfänger-Themen 1
Shizmo Frage zu Comparable Java Basics - Anfänger-Themen 4
L LinkedList Comparable < > MEHRFACH implementieren? Java Basics - Anfänger-Themen 3
N Datentypen LocalDate Generic Comparable Java Basics - Anfänger-Themen 2
S Generics und Comparable Interface Java Basics - Anfänger-Themen 5
N Compiler-Fehler Comparable / compareTo implementierung Java Basics - Anfänger-Themen 2
F Comparable mit String Java Basics - Anfänger-Themen 5
M Comparable und Comparator nicht ganz klar Java Basics - Anfänger-Themen 1
F Objekte sortieren mit Comparable Java Basics - Anfänger-Themen 9
R Mehrere Interfaces(Comparable, ...) Java Basics - Anfänger-Themen 2
B Comparable & Comparator Java Basics - Anfänger-Themen 9
C Comparable Interface Java Basics - Anfänger-Themen 8
T Interface Interface Comparable Problem... Java Basics - Anfänger-Themen 2
H Interface Comparable Verständnisfrage Java Basics - Anfänger-Themen 6
B Object "Method" in TreeSet, Fehler beim Vergleichen/Comparable Java Basics - Anfänger-Themen 9
pg1337 Interface Comparable-Interface bei HashMap Java Basics - Anfänger-Themen 21
J Probleme mit Comparable, compareTo() Java Basics - Anfänger-Themen 2
A Comparable interface Java Basics - Anfänger-Themen 26
I Interface Comparable für Server-Item-Interface Java Basics - Anfänger-Themen 12
P Comparable und Generics Java Basics - Anfänger-Themen 6
S comparable und equals Java Basics - Anfänger-Themen 7
S Unterschied Comparable und Comparator Java Basics - Anfänger-Themen 2
M Frage zum Interface Comparable Java Basics - Anfänger-Themen 3
S Comparable Java Basics - Anfänger-Themen 4
H Comparable und Comparator Java Basics - Anfänger-Themen 22
S instanceof Comparable...geht nicht? Java Basics - Anfänger-Themen 20
M comparable funktion & reverse funktion Java Basics - Anfänger-Themen 8
H Mehrere Comparable Java Basics - Anfänger-Themen 4
S Comparator / Comparable ? Java Basics - Anfänger-Themen 3
D Comparable - Bucketsort / Radixsort? Java Basics - Anfänger-Themen 2
B Mehrere Werte mit Comparable sortieren Java Basics - Anfänger-Themen 14
S String umwandeln in Comparable Java Basics - Anfänger-Themen 6
R Comparable Interface Funktionalität selbst programmieren? Java Basics - Anfänger-Themen 3
A Interface Comparable Java Basics - Anfänger-Themen 2
D Frage zu Collection.sort bzw. Comparator u. Comparable Java Basics - Anfänger-Themen 2
B Wann Comparator und wann Comparable Java Basics - Anfänger-Themen 6
frau-u Wie vergleicht Comparable Java Basics - Anfänger-Themen 2
M Comparable - Bedingung erzwingen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben