Generics Tripel

LeeSin

Mitglied
Servus zusammen, ich habe zwei klassen und arbeite mit dem Comparable interface und dem Comparator und ich muss drei WErte vergleichen nach "größen so wie ich das verstanden habe". Doch verstehe ich nicht ganz wie ich das umsetzen soll und würde mich über ein paar Denkanstöße sehr freuen!

1. Klasse
Java:
public class Tripel<U, V, W> implements Comparable<Tripel<U, V, W>> {
    /**
     * instance variables
     */
    U u;
    V v;
    W w;

    /**
     * from comparable interface
     */
    @Override
    public int compareTo(Tripel<U, V, W> o) {
        return 0;
    }

    /**
     * Constructor
     *
     * @param first  parameter
     * @param second parameter
     * @param third  parameter
     */
    public Tripel(U first, V second, W third) {
        this.u = first;
        this.v = second;
        this.w = third;
    }

}

2.Klasse
Java:
import java.util.Comparator;

public class TripelComparator<U, V, W> implements Comparator<Tripel<U, V, W>> {

    /**
     * compare from comparator and can equal objects from Tripel
     */
    @Override
    public int compare(Tripel<U, V, W> o1, Tripel<U, V, W> o2) {
        return 0;
    }

}

Ich soll u aufsteigend dann v aufsteigend dann w aufsteigend vergleichen. Denke mal das beduetet der größe nach? Mir fehlt irgendwie das wissen um das richtig mit den generics anzuwenden wie ich die Objekte logisch vergleiche. Im Netz konnte ich bisher nichts finden und Bücher haben mir leider auch nicht richtig geholfen.

Würde mich über anstöße freuen!

Liebe Grüße
Lee SIn
 

mihe7

Top Contributor
Ist die Klasse Tripel so vorgegeben? Sollst Du die Klasse anpassen? Wenn ja, darfst Du die Deklaration ändern? Ich frage, weil das in der Form nur funktioniert, wenn Du den Typ von U, V und W überprüfst (U, V und W sind beliebige Typparameter. Beliebige Typen definieren aber keine Ordnung).
 

Flown

Administrator
Mitarbeiter
Wie sieht die Aufgabe wirklich aus?

Die Klassendeklaration würde sonst anders aussehen:
Java:
public class Tripel<U extends Comparable<? super U>, V extends Comparable<? super V>, W extends Comparable<? super W>> implements Comparable<Tripel<U, V, W>> {
 
Zuletzt bearbeitet:
G

Gelöschtes Mitglied 9001

Gast
Wie Flown schon schreibt, muss jeder der drei Typen comparable sein oder du implementierst für jeden einen Comparator. In dem Comparator, den du schon hast, gehst du dann wie folgt vor:
Vergleiche die U-Werte. Sind die nicht gleich -> entsprechend -1 oder 1 zurückliefern.
Vergleiche die V-Werte. Sind die nicht gleiche -> entsprechend -1 oder 1 zurückliefern.
Das gleiche mit W.
 

Barista

Top Contributor
ich habe zwei klassen und arbeite mit dem Comparable interface und dem Comparator und ich muss drei WErte vergleichen

Diese drei Werte müssen sicher den gleichen Typ haben.
Du benötigst also nur einen Typ-Parameter.
Sieh Dir das mal bei Comparable an:

Java:
public class X extends Comparable<X> {
    
}

Abgesehen davon ist die Aufgabenstellung sehr verworren.
Sicher eine Hausaufgabe, der Sinn einer Hausaufgabe ist, sich mit dem Problem zu befassen, nicht die Aufgabe von Anderen lösen zu lassen.
 

mrBrown

Super-Moderator
Mitarbeiter
Ich würde ein Tripel als 3-Tupel von Elementen sehen, wobei die Elemente vom gleichen Typ sind. Siehst du das anders?
In nahezu jeder Implementierung ist das anders gelöst. Tupel (in Varianten von 1-X Elementen) ist meist 'beliebige Typen, feste Länge', und Listen 'gleiche Typen, beliebige Länge' (gleiche Typen natürlich nur in sprachen mit statischen Typen).
zB in Haskell, Typescript, Java mit zB javatuples, C#, Python, ...
 

temi

Top Contributor
Da ich keine Ahnung davon habe, halte ich mich wohl besser raus ;)
Ein
n
-Tupel ist eine Zusammenfassung von
n
mathematischen Objekten
x_{1},\ldots ,x_{n}

So steht es in Wikipedia und als Laie hab ich das so interpretiert, wie oben geschrieben.
 
K

kneitzel

Gast
Wenn der Typ gleich wäre, dann bräuchte man diese Klassen nicht unbedingt. Dann wäre ein einfaches Array prinzipiell auch nutzbar.

Erst bei der Implementation zusätzlicher Methoden würde ich einen Mehrwert durch Kapselung sehen ...

Das nur als Denkanreiz. Ich denke auch, dass da drei unterschiedliche Typen Sinn machen.
 
K

kneitzel

Gast
Nunja, du erzeugt ein Tripel: du hast 3 Werte.
Du erzeugt ein [3] und hast 3 Werte.

Das Problem ist nur, dass du bei einer Übergabe im Typ die 3 Werte nicht drin hast. Das hast du vermutlich gemeint.

Aber in der Struktur hast du die 3 Werte natürlich als fixe Länge.
 
K

kneitzel

Gast
Wibei beides recht blöde Krücken sind, die mir nicht gefallen. Man hat 3 Werte, die ja irgend etwas ausdrücken und die irgendwie zusammen gehören.

Ich saube mir mal etwas aus den Fingern: Autos, da speichert man ganz viele Daten... und nun gibt es da etwas wie getBeschleunigungswerte oder so. Und da kommen halt 3 Zahlen zurück: PS, Sekunden von 0 auf 100 und Sekunden von 100 auf 120.

Bei einem Tripel hat man dann bei der Abfrage so Dinge wie getFirst, getSecond, getThird oder was man da als universelle Getter nehmen möchte.

Da würde ich auf die Typprüfung lieber verzichten und Konstanten nutzen so dass ich da dann sowas wie ....[RESULT_INDEX_HORSEPOWER] und so hätte ... die fehlende Typkontrolle des Compilers muss natürlich entsprechend mit Unit Tests abgedeckt sein.... (nicht schön, klar!)

Aber das ist auch eine absolute Krücke. Wieso nicht einfach eine kleine Klasse dafür...oder Records von Java14 bieten sich an.

Dann habe ich die volle Typisierung + lesbaren Code.

Pair und Co haben zumindest in meinen Augen keinen wirklich großen Nutzen. (Die Aufgabe hier ist ja wohl auch mehr eine reine Übung)

Oder übersehe ich da etwas?
 

Blender3D

Top Contributor
Ich würde ein Tripel als 3-Tupel von Elementen sehen, wobei die Elemente vom gleichen Typ sind. Siehst du das anders?
z.B. Ein Wahrscheinlichkeitsraum ist ein Tripel aus ( Ergebnismenge, Algebra, Wahrscheinlichkeitsmaß )
Allerdings ist bei unterschiedlichen Typen ein Größenvergleich im Allgemeinen nicht sinnvoll. Daher denken ich, dass in dem Beispiel der selbe Typ gemeint ist.
 

Barista

Top Contributor
Warum sollten die drei den gleichen Typ haben? Üblich wären eher unterschiedliche Typen.

Sieh dir mal eine Beispiel Implementierung von compareTo vor der Einführung von Generics an:

Java:
public int compareTo(Object other) {
    X otherX = (X) other;
   
    ... weiterer Code ...
}

Dies muss umkehrbar funktionieren (weiss jetzt nicht , ob das 'reflexiv' heisst, steht im Buch "Effective Java" von Josh Bloch):

Java:
a.compareTo( b ) == -( b.compareTo( a ) )

Demzufolge kann man nur mit dem gleichen Typ komperieren (jemand wird dieses komische Wort hassen).
 

mrBrown

Super-Moderator
Mitarbeiter
Sieh dir mal eine Beispiel Implementierung von compareTo vor der Einführung von Generics an:

Java:
public int compareTo(Object other) {
    X otherX = (X) other;
  
    ... weiterer Code ...
}

Dies muss umkehrbar funktionieren (weiss jetzt nicht , ob das 'reflexiv' heisst, steht im Buch "Effective Java" von Josh Bloch):

Java:
a.compareTo( b ) == -( b.compareTo( a ) )

Demzufolge kann man nur mit dem gleichen Typ komperieren (jemand wird dieses komische Wort hassen).
Das ist mit Tripel<String, Integer, Double> problemlos möglich.

Man kann logischerweise nur zwei gleichen Typen vergleichen, aber der zu vergleichende Typ ist in diesem FallTripel<X, Y, Z>. X, Y und Z können aber unterschiedlich sein.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Generics machen mich verrückt Java Basics - Anfänger-Themen 8
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
MarvinsDepression Datentypen Generics: Erste Berührungen Java Basics - Anfänger-Themen 6
M Generics Vererbung Listen Java Basics - Anfänger-Themen 2
Cassy3 Generics - CompareTo Java Basics - Anfänger-Themen 21
T Collections Sind Subklassen-Objekte in Listen mit Generics erlaubt? Java Basics - Anfänger-Themen 16
districon Generics implementieren Java Basics - Anfänger-Themen 2
CptK Überprüfen ob übergebenes Objekt zu Generics passt Java Basics - Anfänger-Themen 2
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
B Hilfe bei Generics Java Basics - Anfänger-Themen 11
G Generics Compilerfehler Java Basics - Anfänger-Themen 6
G Generics Methoden Java Basics - Anfänger-Themen 7
G Generics Java Basics - Anfänger-Themen 3
W Fragen zu Generics Java Basics - Anfänger-Themen 14
S Hilfe. Generics und BiFunctions Java Basics - Anfänger-Themen 10
X Wie Generics richtig benutzen ? Java Basics - Anfänger-Themen 5
S Allgemeine Frage über Generics und Vererbungen Java Basics - Anfänger-Themen 5
S Generics-Problem: Class, Class<?>, Class<Object> Java Basics - Anfänger-Themen 4
I Java Generics factory method Java Basics - Anfänger-Themen 2
M Verständnisfrage zu Generics Java Basics - Anfänger-Themen 7
I Generics und Comparable Java Basics - Anfänger-Themen 14
G Generics mit ? und Diamantoperator Java Basics - Anfänger-Themen 4
G Generics: Wildcard ? Java Basics - Anfänger-Themen 12
D Generics methode Java Basics - Anfänger-Themen 2
I Frage zu Generics und Wildcards Java Basics - Anfänger-Themen 2
N Generics und Casting eines Objekts Java Basics - Anfänger-Themen 1
A Generics Java Basics - Anfänger-Themen 6
A Vererbung/Interfaces/Generics Java Basics - Anfänger-Themen 12
W Generics - Typ zurückbekommen Java Basics - Anfänger-Themen 4
Dimax Erste Schritte Generics von Profis leicht erklärt Java Basics - Anfänger-Themen 7
C Warum funktioniert 'instanceof' bei generics nicht? Java Basics - Anfänger-Themen 4
J Collections Generics: Typ wird nicht erkannt Java Basics - Anfänger-Themen 7
D Generics ArrayList: Bug im Quellcode Java Basics - Anfänger-Themen 14
C Generics Java Basics - Anfänger-Themen 8
M Generics getter und setter Methoden Java Basics - Anfänger-Themen 4
T Generics in Java... Java Basics - Anfänger-Themen 9
J Generics Java Basics - Anfänger-Themen 3
J Generics Datentypen vergleichen Java Basics - Anfänger-Themen 16
V Generics / eigene Liste Java Basics - Anfänger-Themen 4
O Generics - Implementierung Java Basics - Anfänger-Themen 7
Shizmo Frage zu Generics Java Basics - Anfänger-Themen 3
F Multiple Generics Java Basics - Anfänger-Themen 10
G Datentypen verschiedene Objekte in eine ArrayList, Generics Java Basics - Anfänger-Themen 2
H Typsicherheit/Generics Java Basics - Anfänger-Themen 1
U Java generics funktioniert nicht Java Basics - Anfänger-Themen 0
Tarrew Generics: Erste gemeinse Oberklasse als Rückgabewert Java Basics - Anfänger-Themen 1
N Generics Vererbung Wildcard Interface Java Basics - Anfänger-Themen 8
S Generics und Comparable Interface Java Basics - Anfänger-Themen 5
A Generics Java Basics - Anfänger-Themen 4
M Frage zu Generics in Klassen, Abstrakten Klassen und Interfaces Java Basics - Anfänger-Themen 5
R Compiler-Fehler Generics Problem Java Basics - Anfänger-Themen 2
K Interface Generics, Interfaces und Listen - ich bin verwirrt. Java Basics - Anfänger-Themen 7
K Generics bei Klassen- und Interfacedeklarationen Java Basics - Anfänger-Themen 3
D toArray und Generics Java Basics - Anfänger-Themen 2
D Zwei Generics beim Überladen von Methoden Java Basics - Anfänger-Themen 3
C Erste Schritte Filter für Generics oder ähnliches Java Basics - Anfänger-Themen 2
M Frage zu Generics-Deklaration Java Basics - Anfänger-Themen 5
S Frage zu Collection-Generics in Subklassen Java Basics - Anfänger-Themen 6
J Java Generics - Frage zu Types Java Basics - Anfänger-Themen 2
M <T> Generics Java Basics - Anfänger-Themen 7
B Interface Generics: prüfen ob Interface deklariert wird Java Basics - Anfänger-Themen 18
T Polymorphie Generics-Problem Java Basics - Anfänger-Themen 2
B Hilfe beim Verständnis zu Generics Java Basics - Anfänger-Themen 7
J Array Generics Java Basics - Anfänger-Themen 3
J Generics casten Java Basics - Anfänger-Themen 14
J Generics wildcard Java Basics - Anfänger-Themen 6
E Listen und Generics Java Basics - Anfänger-Themen 9
X Generics Java Basics - Anfänger-Themen 6
M Datei einlesen mit generics? Java Basics - Anfänger-Themen 9
D Warum sind Generics mit Vorsicht zu genießen? Java Basics - Anfänger-Themen 6
M OOP Mit Generics auf Methoden zugreifen? Java Basics - Anfänger-Themen 10
S Generics Java Basics - Anfänger-Themen 4
G Generics kein Zugriff auf getter eines Objekts Java Basics - Anfänger-Themen 4
L Datentypen Problem mit Generics und null Java Basics - Anfänger-Themen 6
E Klassen java.util.ArrayList<E> als Generics Java Basics - Anfänger-Themen 16
W Interface Problem mit Generics Java Basics - Anfänger-Themen 2
M OOP Generics und Wildcards Java Basics - Anfänger-Themen 3
D Generics - Warnmeldungen Java Basics - Anfänger-Themen 2
M Polymorphie generics einsteigerprobleme Java Basics - Anfänger-Themen 3
D Vererbung Generics und Vererbung Java Basics - Anfänger-Themen 8
C Generics Array Java Basics - Anfänger-Themen 43
D Fehler mit generics Java Basics - Anfänger-Themen 10
S Generics - CaseInsensitiveMap selber schreiben? Java Basics - Anfänger-Themen 5
K Datentypen Generics Java Basics - Anfänger-Themen 3
P Comparable und Generics Java Basics - Anfänger-Themen 6
I Generics (Subtypen) Java Basics - Anfänger-Themen 17
N Typeinschränkung bei Generics Java Basics - Anfänger-Themen 13
C Generics und Cast Java Basics - Anfänger-Themen 5
H Generics werden in -source 1.2 nicht unterstützt Java Basics - Anfänger-Themen 16
M Datentypen Generics: Exacten Typ ermitteln Java Basics - Anfänger-Themen 6
N Generics und Interfaces Java Basics - Anfänger-Themen 5
S Generics und "generische Feldzuweisungen" Java Basics - Anfänger-Themen 5
lumo Java Generics Java Basics - Anfänger-Themen 19
M verlinkte Liste mit generics Java Basics - Anfänger-Themen 7
capgeti Datentypen Static methoden aus Superklasse mit Generics definieren? Java Basics - Anfänger-Themen 9
S Generics und Typerkennung Java Basics - Anfänger-Themen 7
A Cast ohne Warnung bei Generics Java Basics - Anfänger-Themen 2
B Java Listen und Generics Java Basics - Anfänger-Themen 35
O Abstract Method & Generics Java Basics - Anfänger-Themen 10
K Aufgabe Generics Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben