Collections Fragen zu gleichen Elementen in TreeSet

Kann das das TreeSet?

  • Ja.

    Stimmen: 0 0,0%
  • Nein.

    Stimmen: 0 0,0%
  • Ja, wenn... (bitte begründen...)

    Stimmen: 0 0,0%

  • Anzahl der Umfrageteilnehmer
    0
X

Xyz1

Gast
Kann ein(e) TreeSet gleiche Elemente gestatten UND die Reihenfolge gleicher Elemente beibehalten, wenn man einen Comparator angibt ODER andere Kanonen herzunehmen?
 

mihe7

Top Contributor
Ganz allgemein, direkt unter der Verwendung von java.util.TreeSet denke ich nicht. Grund: die Reihenfolge der Prüfungen ist nicht definiert. Es wäre also abhängig von der konkreten TreeSet-Implementierung, ob und in welcher Weise eine Reihenfolge eingehalten wird.

Mit einem Element-Wrapper muss es funktionieren (der bekommt halt eine ID, die eine Ordnung auf gleichen Elementen definiert). Mit einer Subklasse von TreeSet mit integriertem Wrapper sollte das transparent möglich sein.
 
X

Xyz1

Gast
der bekommt halt eine ID
Danke, so habe ich mir das auch gedacht, bis jetzt war es so dass bei Comparator-Gleichheit und bei Nicht-equals-Gleichheit genau das zuletzt eingefüte Elem eingeführt wurde (Set guarantee). Nach Comparator-Gleichheit gleiche Elems standen nach Mehrfacheingefügt also nicht mehr im Set. :oops: Ich muss da noch etwas bei fummeln.
 

mihe7

Top Contributor
bis jetzt war es so dass bei Comparator-Gleichheit und bei Nicht-equals-Gleichheit genau das zuletzt eingefüte Elem eingeführt wurde (Set guarantee).
Wenn, dann müsstest Du es ja umgekehrt machen: Comparator-Ungleichheit bei equals-Gleichheit. Das Problem ist, dass man nicht weiß, welches Element bei compare(a, b) für a verwendet wird und es sein könnte, dass im Code ja einmal compare(a,b) und einmal compare(b, a) vorkommt.
 

mihe7

Top Contributor
Java:
int compare(Object o1, Object o2) {
    if (o1.equals(o2)) { return -1; }
    return ...
}
 
X

Xyz1

Gast
Kontrakt? :confused: Ich dachte das hieße Konvention.

@mihe7 So geht es:
Java:
        TreeSet<E[]> tsl = new TreeSet<>((o1, o2) -> {
            int p1 = 0;
            int p2 = 0;
            for (int i = 0; i < o1.length; i += 2) {
                p1 += (o1[i + 1].sell_price - o1[i].buy_price);
                p2 += (o2[i + 1].sell_price - o2[i].buy_price);
            }
            if (p1 != p2) {
                return Integer.compare(p2, p1);
            }
            return Integer.compare(o1.hashCode(), o2.hashCode());
        });

Netbeans meckert mich an .hashCode() auf einem Array aufzurufen. :(
 
X

Xyz1

Gast
Oder Schnaps? :D (Obwohl der heutige Tag auf -tag endet!!!! :D)

Ne mal ernsthaft, ich bin noch nicht sicher ob das funktionieren kann. Du schriebst die Einfügeoperation wäre ein Implementierungsdetail.... Bei meiner Maschine ist es so dass zum Bleistift beim Einfügen equals() gar nicht mehr zum Zuge kommt. Denn wenn doch dann müsste bei Comparator-Gleichheit Hashcode-equals()-Gleichheit falsch sein, wonach eingefügt werden SOLLTE.... tuts aber nicht.

Wärs nicht doch besser alles nicht sortiert in einer listenartigen Struktur anzusammeln und zum Schluss einmal zu sortieren?
 

mihe7

Top Contributor
Wärs nicht doch besser alles nicht sortiert in einer listenartigen Struktur anzusammeln und zum Schluss einmal zu sortieren?
Vermutlich schon. Kommt halt darauf an, was Du letztlich vorhast; Deine Frage zielte aber explizit auf TreeSet ab.

Bei meiner Maschine ist es so dass zum Bleistift beim Einfügen equals() gar nicht mehr zum Zuge kommt.
Nicht nur bei Deiner Maschine und nicht nur beim Einfügen: für das TreeSet ist dokumentiert, dass ausschließlich ein Comparator zum Einsatz kommt.

Genau deswegen kann man ja zwei Objekte, die equals-gleich sind, in ein TreeSet überhaupt erst einfügen. Dazu muss man aber dafür sorgen, dass compareTo bzw. der Comparator Ungleichheit liefert, wenn equals-Gleichheit vorliegt.

Das Problem dabei ist, dass man die Implementierung nicht kennt, d. h. man weiß nicht, ob z. B. das eingefügte mit dem vorhandenen oder das vorhandene mit dem eingefügten Element verglichen wird. Man weiß auch nicht, ob diese Vergleiche an allen Stellen im TreeSet gleichermaßen erfolgt. Daher ist das eine sehr fragile Angelegenheit, die nur mit Glück funktioniert.

Wenn man das stabil mit einem TreeSet machen will, benötigt man einen Wrapper, der im Endeffekt einen Knoten - bestehend aus Nutzdaten und einer ID - im Baum darstellt. Die ID muss in Deinem Fall die Einfügereihenfolge darstellen.

Dann kann man für zwei Wrapper-Objekte w1 und w2 definieren:
w1 gleich w2 <=> w1.id == w2.id
w1 kleiner w2, falls w1.daten kleiner w2.daten oder (w1.daten gleich w2.daten UND w1.id < w2.id)
 
X

Xyz1

Gast
Mal anders an die Frage heran.... Müssen die in einer TreeSet zu sortierenden E[]s nicht die Eigenschaft einer totalen Quasiordnung (reflexiv ,transitiv und total) inne haben? - Oder anders: Besitzen die E[]s diese nicht bereits?
 
X

Xyz1

Gast
Ich bin mir ganz sicher das das nicht Kontrakt heißt sondern Konvention.... Aber Du wirst ganz bestimmt mehr Rechtsvorlesungen gehört haben als ich, Dich bestens damit auskennen und niemals Lügen verbreiten? :( Wenn ich etwas nicht weiß dann antworte ich idR nicht (um andere nicht zu stören) :) Bei Dir scheinbar nicht so. :(
 

mrBrown

Super-Moderator
Mitarbeiter
Ich bin mir ganz sicher das das nicht Kontrakt heißt sondern Konvention.... Aber Du wirst ganz bestimmt mehr Rechtsvorlesungen gehört haben als ich, Dich bestens damit auskennen und niemals Lügen verbreiten? :( Wenn ich etwas nicht weiß dann antworte ich idR nicht (um andere nicht zu stören) :) Bei Dir scheinbar nicht so. :(
Durchsuch einfach mal das Javadoc von Comparator nach "contract" und nach "convention" :rolleyes:

Was zur Hölle soll das mit Rechtsvorlesungen zu tun haben? Wie viel Stuss kann man noch in einem Beitrag unterbringen?
 
X

Xyz1

Gast
Netbeans meckert mich an .hashCode() auf einem Array aufzurufen. :(
@mihe7 hoffe ich wecke Dich nich....
Ich weiß wieso Netbeans da meckert, weils da Hashcollisionen geben könnte und zwar werden da ca 0,0001% der Elem NICHT gespeichert. :(

ALSO: Doch ein Wrapper. :cool:

220px-WHOPPER_with_Cheese%2C_at_Burger_King_%282014.05.04%29.jpg
(Quelle)
 

mrBrown

Super-Moderator
Mitarbeiter
Warum willst du überhaupt ein TreeSet nutzen? Ein Set ist ja offensichtlich nicht das, was du willst...

Nimm einfach ne geeignete Datenstruktur (am besten als Ersatz für das Set und für deine Datenstruktur...), dann kannst du auf merkwürdige Hacks verzichten.
 

mihe7

Top Contributor
Ich finde es gar nicht so merkwürdig, wenn man gleichen Elementen ein zusätzliches Merkmal spendiert, um sie untereinander unterscheidbar zu machen und ggf. auch noch eine Ordnung darüber zu definieren. Das machen die Päpste schon lange ;)
 
X

Xyz1

Gast
@mrBrown Eine TreeSet heißt zwar Set.... aber ist keine ( im eigentlichen Sinne ). Das hast Du bestimmt schon gemerkt.

Was ist denn so schlecht daran sich vorhandener Strukturen zu bedienen?

Ein Jack wär eher eine Zweckentfremdung. :( ( Das ist es natürlich nicht, es vermittelt eher ein falsches Bild *grübel - und hier ein paar fiese Phraologismen einsetzen.... ;)* ) : ein falscher Hase zB :D
 

mrBrown

Super-Moderator
Mitarbeiter
Ich finde es gar nicht so merkwürdig, wenn man gleichen Elementen ein zusätzliches Merkmal spendiert, um sie untereinander unterscheidbar zu machen und ggf. auch noch eine Ordnung darüber zu definieren. Das machen die Päpste schon lange ;)
Generell ist das auch nicht merkwürdig ;)
nur, wenn man das machen will, damit man gleiche Element in eine Collection zwängen kann, die für das Problem ungeeignet ist, ist etwas merkwürdig...

@mrBrown Eine TreeSet heißt zwar Set.... aber ist keine ( im eigentlichen Sinne ). Das hast Du bestimmt schon gemerkt.
Nö, hab ich bisher noch nicht gemerkt. (...außer du meinst equals vs compare)


Was ist denn so schlecht daran sich vorhandener Strukturen zu bedienen?
Nichts, das ist genau richtig. Die Frage ist nur, was die richtige vorhandene Struktur ist, und dafür müsste man wissen, was deine Anforderung ist ("gleiche Elemente in ein TreeSet würde ich jetzt nicht als solche bezeichnen...) ;)
 

mihe7

Top Contributor
Mir schwebt etwas wie in einer DB vor: ein non-unique Index auf Basis eines Baums unter Beibehaltung der Einfügereihenfolge. Welche Standardklasse gäbe es hierfür außer dem TreeSet noch?
 

mrBrown

Super-Moderator
Mitarbeiter
z.B. Wrapper um Map<E,List<E>>, dürfe vom Aufwand her ähnlich sein wie eine vernünftige Umsetzung mit TreeSet und Wrapper um die Elemente

Edit: Als Map Implementierung dann TreeMap, wenn man das als Baum braucht
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
Oder sogar, wie in zB den Apache-Commons-Bags, ein Wrapper um Map<E, Integer>, wenn die Elemente das hergeben
 
X

Xyz1

Gast
Ähnliche Java Themen
  Titel Forum Antworten Datum
Zrebna Fragen zu Testabdeckungs-Metriken Allgemeine Java-Themen 4
MarvinsDepression Unbekanntes Zeichen in fremden Code wirft Fragen auf Allgemeine Java-Themen 4
B HTTP Allgemeine Fragen über Suchmaschine nutzen mit Java Allgemeine Java-Themen 20
K BlueJ - Fragen zu dem Spiel Pacman (Nachprogrammieren) Allgemeine Java-Themen 141
V Ich hätte 2 Fragen Allgemeine Java-Themen 5
ME2002 Fragen aus einer Java Klausur Allgemeine Java-Themen 67
H Fragen zur Kraken Api Allgemeine Java-Themen 1
nonickatall Klassen Grundsätzliche Fragen zu geplanter Programmstruktur Allgemeine Java-Themen 5
W Ein paar Fragen zu .properties und .css Allgemeine Java-Themen 6
W Mal ein paar generelle Fragen zu InputStream und OutputStream Allgemeine Java-Themen 4
X Fragen zur Javamail API und Gmail Allgemeine Java-Themen 4
T Fragen bezgl. Lambdas Allgemeine Java-Themen 20
A Neuerungen in Java 8 StreamAPI- Paar fragen Allgemeine Java-Themen 4
temi Fragen zur Software-Architektur Allgemeine Java-Themen 123
M Diverse Design-Fragen Allgemeine Java-Themen 6
J 2 Fragen zur Vererbung Allgemeine Java-Themen 5
H Java FX 2 Fragen um Programm in mehrere sprachen zu übersetzen in Gluon Framwork Allgemeine Java-Themen 3
M Fragen beantworten über Textfeldeingabe Allgemeine Java-Themen 5
D Grundsätzliche Fragen zum Heap Space Allgemeine Java-Themen 12
J Allgemeine Fragen zu Vererbung Allgemeine Java-Themen 1
M Allgemeine Fragen meinerseits Allgemeine Java-Themen 4
V Wie kann ich die Fragen mit den anderen Klassen verbinden? Allgemeine Java-Themen 1
J Fragen zu generischer doppelt verketteter Liste (bei fehlendem Grundverständnis) Allgemeine Java-Themen 1
R Es gibt keine dummen Fragen (hab ich mal gehört) Allgemeine Java-Themen 11
T Fragen zum Thread-Thema Allgemeine Java-Themen 4
2 2 Klein Fragen Allgemeine Java-Themen 7
alderwaran .jar Code Signing, User-Keystore und Fragen dazu Allgemeine Java-Themen 0
T Fragen zum Thread-Thema Allgemeine Java-Themen 9
A Java Theorie-Fragen Allgemeine Java-Themen 7
K Java QUIZ-Spiel Fragen und Antworten generieren?! Allgemeine Java-Themen 5
R Socket Fragen zu UDP Allgemeine Java-Themen 1
B Noob-Fragen zu Tablets und PC kompatiblität... Allgemeine Java-Themen 6
D Ein paar allgemeine Fragen zu Java Allgemeine Java-Themen 19
L Fragen für Facharbeit: Analyse von Strings in Java Allgemeine Java-Themen 4
R Fragen zu Server + UI Allgemeine Java-Themen 2
U Vier Fragen zu Java Allgemeine Java-Themen 2
H MediaManager Fragen/Probleme Allgemeine Java-Themen 6
D Fragen zum erstellen einer ausführbaren Jar Datei Allgemeine Java-Themen 3
C Polymorphie Fragen zur Annotations von Persistenz Allgemeine Java-Themen 2
O Fragen über Fragen - Bei Änderung XML-Datei -> Anpassung GUI Allgemeine Java-Themen 7
StrikeTom Java Performance Fragen Allgemeine Java-Themen 5
Luk10 Fragen zum ByteBuffer (lwjgl - icons) Allgemeine Java-Themen 2
F Akkumulator Hough-Transformation offene Fragen Allgemeine Java-Themen 4
Luk10 Fragen zu Naming-Conventions Allgemeine Java-Themen 5
Z Einige Fragen Allgemeine Java-Themen 10
T OOP Einige Fragen zu UML-Klassendiagrammen Allgemeine Java-Themen 6
G Einige Fragen zu ResourceBundles Allgemeine Java-Themen 2
S Fragen zu verschiedenen Themen vom JCreator Allgemeine Java-Themen 2
DStrohma Grundsätzliche Fragen zum Aufbau eines komplexeren Programmes Allgemeine Java-Themen 8
Semox Grapheneditor - Allgemeine Fragen zum Logikdesign Allgemeine Java-Themen 3
O kleine Fragen eines Anfängers Allgemeine Java-Themen 2
X Executor fragen ob fertig Allgemeine Java-Themen 13
nrg Swing 2 Fragen zu Swing/AWT Allgemeine Java-Themen 7
K Reflections Fragen Allgemeine Java-Themen 7
S Fragen zum SCJD-Zertifikat Allgemeine Java-Themen 2
M Backend Entwicklung - Konzept fragen Allgemeine Java-Themen 3
E Fragen zu Scala Allgemeine Java-Themen 11
Daniel_L Fragen zu RegEx und URL umwandeln Allgemeine Java-Themen 4
J Diverse Fragen bezüglich Jasper Allgemeine Java-Themen 3
S Fragen zum ShutdownHook Allgemeine Java-Themen 7
V Fragen zu einem Java Browser Allgemeine Java-Themen 7
G Fragen zum eigenen Scheduler Allgemeine Java-Themen 4
M Drag and Drop: 3 Fragen Allgemeine Java-Themen 3
L Einige Fragen zu Java Allgemeine Java-Themen 9
F Linguistische Fragen zu Javadoc bzw. Englisch Allgemeine Java-Themen 4
E Einfache Fragen zu Dateien Allgemeine Java-Themen 7
E Thread Fragen in Verbindung mit Swing Allgemeine Java-Themen 4
M MVC Design Pattern - Verständniss Fragen Allgemeine Java-Themen 3
X Einige Fragen zu Serialisierung Allgemeine Java-Themen 2
H Java Multiplicoice Test (10 Fragen) Allgemeine Java-Themen 11
J Viele Fragen. =) Hoffentlich könnt ihr helfen Allgemeine Java-Themen 9
D Grundsätzliche Fragen zur Grafikdarstellung in Spielen Allgemeine Java-Themen 2
J 2 Fragen zu JMF und eine Rechtsfrage Allgemeine Java-Themen 3
S Viele Fragen eines Umsteigers (von .NET) Allgemeine Java-Themen 6
C LinkedList Fragen Allgemeine Java-Themen 7
P Fragen zur JBuilder und den kosten. Allgemeine Java-Themen 7
reibi JVM fragen welche Apps geladen sind Allgemeine Java-Themen 7
I Fragen zum Internetseiten Einlesen/Auswerten Allgemeine Java-Themen 5
F Paket und Software Design Fragen. Allgemeine Java-Themen 5
S 2 Fragen allgemeine fragen zu final und interface Allgemeine Java-Themen 13
M ein paar fragen über JBoss und Catalina Allgemeine Java-Themen 7
D Allgemeine Fragen zum Speichern Allgemeine Java-Themen 3
F allgemeine Fragen zu Java Allgemeine Java-Themen 9
S Fragen zu 4 speziellen Listen Allgemeine Java-Themen 4
U JFrame, JOptionPane - vor dem Schließen Benutzer fragen Allgemeine Java-Themen 10
I zwei simple fragen Allgemeine Java-Themen 22
G 2 Fragen Allgemeine Java-Themen 7
G Fragen zu ausführbaren JAR Files Allgemeine Java-Themen 23
G Fragen zu JTextField bzw. JTextArea Allgemeine Java-Themen 2
J 5 Fragen. Allgemeine Java-Themen 2
P Tausend Fragen... Allgemeine Java-Themen 3
Thallius Verschiedene entities für gleichen Code…. Allgemeine Java-Themen 8
T Meine Frage lautet wie ich 2 CSV Dateien miteinander in Java verbinde und Spalten die zueinander gehören durch den gleichen Key zusammen ausgebe? Allgemeine Java-Themen 5
S 2 methoden mit gleichen namen und ein Interface Allgemeine Java-Themen 9
O Klassen Bruch im gleichen Objekt Speichern Allgemeine Java-Themen 1
E ArrayList Anzahl der gleichen Elemente Allgemeine Java-Themen 4
G Liste anzahl der gleichen Objekte Allgemeine Java-Themen 6
L Klassen Polymorphie:2 Attribute gleichen Namens in einem Objekt Allgemeine Java-Themen 6
L Sicherstellen das 2x die gleichen Daten unter bestimmten Keys enthalten sind. Allgemeine Java-Themen 6
M verschiedene Methonden innerhalb des gleichen Threads Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben