Set erklären dass objekte gleich sind

Underfaker

Bekanntes Mitglied
Hallo zusammen,

ich würde gerne ein Set (bspw. Hashset) anwenden um Doppelungen in meinen Objekten auszusieben, dabei erkennt es allerdings nicht ob meine Objekte "gleich" sind um das eben auch umzusetzen.

Ist es möglich einem Set zu erklären wann meine Objekte gleich sind um sie dann rauszuschmeißen?

Vielen Dank und beste Grüße
 

rme

Top Contributor
Hallo,

überschreib die equals-Methode, die deine Objekte von der Klasse "Object" erben. Die Set-Klasse verwendet diese Methode zum Prüfen auf Gleichheit. Das Standardverhalten ist eine Prüfung, ob sich beide Objekte auf den gleichen Speicher beziehen, d.h. es macht das gleiche wie ==.

Bei einer eigenen Implementierung von equals kann man viel verkehrt machen, lies am besten einmal diesen Abschnitt: Galileo Computing :: Java ist auch eine Insel – 9.3 Object ist die Mutter aller Klassen
 
Zuletzt bearbeitet:

Underfaker

Bekanntes Mitglied
Equals habe ich schon implementiert und läuft auch perfekt, das Set greift leider nicht darauf zu, kann es sein, dass implements comparable das Problem behebt?

[edit] das hilft bei einem TreeSet (scheinbar) aber nich bei einem HashSet..
 
Zuletzt bearbeitet:

rme

Top Contributor
Welche konkrete Set-Implementierung verwendet du? Falls es ein HashSet ist, musst du auch die hashCode-Methode korrekt implementieren, denn equals wird von einem HashSet nur aufgerufen, wenn der hashCode identisch ist. Ein Comparable ist nicht erforderlich, da ein Set nur eine Äquivalenzrelation benötigt, aber keine Ordnung.
 

Underfaker

Bekanntes Mitglied
Hallo und danke.

Mein problem ist, dass ich auf Arrays bzw. verzweigten Arrays arbeite, kann ich das dafür auch machen?
Wenn ich jetzt ein solches Array in den Hash gebe, dann wirft er keine Doppelungen raus, bei dem Objekt selber macht er es.

Danke im Voraus.
 

rme

Top Contributor
Da du bei Arrays weder equals noch hashCode überschreiben kannst, ist das nicht möglich. Du müsstest dir einen eigene Klasse basteln, die die Einträge aufnimmst. equals und hashCode dieser Klasse könntest du dann iterativ implementieren: Bei equals in einer Schleife die enthalteen Elemente beider Objekte mit equals vergleichen und false zurückgeben, sobald ein Vergleich false ist. Bei hashCode würde ich ein einer Schleife die hashCodes aller enthaltenen Objekte via exklusiv-oder verknüpfen.

Edit: Hast du mal überlegt, statt Set + Arrays einfach einen sortierten Baum zu implementieren? Da merkst du ja beim Einfügen, ob der Wert schon vorhanden ist.
 
Zuletzt bearbeitet:

Underfaker

Bekanntes Mitglied
Ich dachte mir das shcon mit der eigenen Klasse und habe die mal gerade geschrieben und es läuft auch (auch wenns leider etwas mehr Arbeit ist).
Ich bin nicht sicher ob das mit dem exklusivoder funktioniert und wenn weiß ich nicht wie.

Bis auf bei einem TreeSet hatte ich bisher nichts mit Bäumen zu tun.
 

rme

Top Contributor
Nachgeschaut, die ArrayList macht es z.B. so:

Java:
public int hashCode() {
    int hashCode = 1;
    Iterator<E> i = iterator();
    while (i.hasNext()) {
        E obj = i.next();
        hashCode = 31*hashCode + (obj==null ? 0 : obj.hashCode());
    }
    return hashCode;
}

Das bedeutet übrigens auch, dass du eine ArrayList ohne Änderung in ein Set packen könntest, vielleicht wäre das die schnellste Lösung.
 

Underfaker

Bekanntes Mitglied
Ok diese Syntax: (obj==null ? 0 : obj.hashCode()) kenne ich nicht, habe etwas Eigenes implementiert was sicher funktioniert aber nciht so "gut" ist.

Ist deine Idee, dass ich ArrayListen in das Set packen soll?
 

rme

Top Contributor
Code:
x = (obj==null ? 0 : obj.hashCode())
ist eine kurze Schreibweise für
Java:
if(obj == null) {
  x = 0;
} else {
  x = obj.hashCode();
}

Da eine ArrayList equals und hashCode korrekt implementiert, könntest du ein Set<ArrayList<DeineKlasse>> nehmen und müsstest hashCode und equals dann nur in deiner Klasse implementieren, dann geht alles.
 

Underfaker

Bekanntes Mitglied
Also soll ich statt einem Array eine ArrayList nehmen, seh ich das richtig?
In diesem Fall ist das der denkbar schlechteste Weg, da unser ganzes Projekt auf verzweigten Arrays aufbaut, wir bilden damit Tableaus (analog zu Matrizen) ab.
 

rme

Top Contributor
Aber die ArrayList kann doch auch verzweigen? Was kannst du mit einem Array machen, was mit einer ArrayList nicht geht?
 

Underfaker

Bekanntes Mitglied
Das Problem ist, dasswir bereits über 10.000 Codezeilen produziert haben die auf solchen Arrays basieren, das alles zu ändern erschiene mir doch etwas übertrieben.
Jedenfalls habe ich das mit der Hashfunktion nun so drin, dass ich eine eigene benutze für eine Objektklasse "Tableau" in der einfach ein solches verzweigtes Array gesetzt wird.

Ich danke dir für deine Mühen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Kann jemand vereinfacht erklären was Maven ist? Allgemeine Java-Themen 8
jhCDtGVjcZGcfzug Klassen Was genau passiert hier? Kann mir das jemand bitte Zeile für Zeile erklären? Allgemeine Java-Themen 1
M Praktische Möglichkeit um Studierenden Java zu erklären Allgemeine Java-Themen 33
J Programme erklären Allgemeine Java-Themen 1
L HttpPost LookUp erklären Allgemeine Java-Themen 2
P JAVA Code in Dokumentation erklären Allgemeine Java-Themen 2
B Kann mir jmd folgendes erklären? Allgemeine Java-Themen 7
J Alghorimus erklären Allgemeine Java-Themen 14
X Wer kann mir das hier erklären? Programm frisst RAM! Allgemeine Java-Themen 11
N RegEx, kann mir das wer erklären? Allgemeine Java-Themen 6
F Wie Fachthemen richtig erklären? Allgemeine Java-Themen 6
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
berserkerdq2 Weiß jemand wie ich im Scenebuilder das Fenster so darstellen kann, dass beim Vollbildmodus die Objekte so angezeigt werden? Allgemeine Java-Themen 1
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
E Datentypen Wie kann ich die Längen der unterschiedlichen Ebenen aus einem Objekt lesen von dem ich weiß, dass es ein mehrdimensionaler Array ist? Allgemeine Java-Themen 3
Drachenbauer Wie sorge ich dafür, dass mein Spiel die ini-Datei in der Resourcen-ordner des Projektes schreibt? Allgemeine Java-Themen 5
C Eclipse einstellen, dass eine bestimmte JDK benutzt werden soll Allgemeine Java-Themen 3
G Methoden Aus einem Event, wo ich weiß, dass es ausgeführt werden wird, eine Get-Methode basteln Allgemeine Java-Themen 8
C HtmlUnit Daten einer Tabelle bekommen ohne, dass diese eine ID aufweist Allgemeine Java-Themen 1
R Wie schaffe ich es, dass java zB 100 zählt ohne ständig "else if" hinschreiben zu müssen? Allgemeine Java-Themen 7
N Input/Output Verhindern, dass log-Einträge auf Console erscheinen Allgemeine Java-Themen 2
S ThreadPoolExecutor: wie stelle ich fest dass meine Threads im Pool mit ihrer Arbeit fertig sind? Allgemeine Java-Themen 3
S Zeichen, dass Programm noch läuft Allgemeine Java-Themen 3
K Applet dass auf mehrere Bibliotheken zugreift Allgemeine Java-Themen 13
B Passwort verwenden ohne dass es im Quelltext steht Allgemeine Java-Themen 24
M Java-Anwendungen so anbieten, dass sie jeder starten kann ;) Allgemeine Java-Themen 19
M Gibt es ein Foren-System, dass in Java programmiert ist? Allgemeine Java-Themen 51
schegga_B javax.crypto - Cipher Objekte - Sevice Provider matching? Allgemeine Java-Themen 1
A Einzelne Objekte und Unterobjekte einer ArrayList ausgeben Allgemeine Java-Themen 53
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
N einem Array Objekte hinzufügen die ihr Array position gespeichert haben Allgemeine Java-Themen 34
E Objekte in einen String packen und wieder laden Allgemeine Java-Themen 5
L Objekte in Set nicht gefunden Allgemeine Java-Themen 13
Avalon Data Transfer Objekte aus Datenbank erstellen Allgemeine Java-Themen 8
G Objekte mit Strings Aufrufen Allgemeine Java-Themen 8
H Objekte speichern und laden Allgemeine Java-Themen 10
H Objekte speichern und laden Allgemeine Java-Themen 1
MiMa Referenz auf Objekte und deren Inhalte Allgemeine Java-Themen 12
W Objekte reproduzieren Allgemeine Java-Themen 2
W Objekte per Reflexion instanziieren Allgemeine Java-Themen 7
W Unittest - Objekte simulieren Allgemeine Java-Themen 7
T OOP Objekte mit Erweiterung Initialisieren Allgemeine Java-Themen 6
O Erste Schritte Objekte als Datenelemente Allgemeine Java-Themen 14
J Equals Mock Objekte Allgemeine Java-Themen 5
J Mockito - Objekte miteinander vergleichen (equals) Allgemeine Java-Themen 6
N Bei Mouse Events nicht mehrere Objekte erstellen Allgemeine Java-Themen 13
J Zugriff auf erstellte Objekte einer Klasse von einer Klasse ausserhalb Allgemeine Java-Themen 3
J Java Objekte = null, Garbagecollector Allgemeine Java-Themen 12
F Listen - Mehrere Objekte Allgemeine Java-Themen 1
J Verständnis Frage zur Instanz, Objekte, Instanzierung, Referenz Allgemeine Java-Themen 14
F Objekte erzeugen Allgemeine Java-Themen 1
E Threads ThreadPoolExecutor remove mit callable Objekte Allgemeine Java-Themen 3
P mehrer Verschiedene Objekte in einer Klasse erstellen. Allgemeine Java-Themen 4
E OOP Objekte und Methoden Allgemeine Java-Themen 1
@SupressWarnings() Umgebungsvariable Objekte "gekoppelt" Allgemeine Java-Themen 6
S Algorithmus um Objekte auf einer Flaeche mit gleichem Abstand anzuordnen..? Allgemeine Java-Themen 20
C Objekte in Array List speichern? Allgemeine Java-Themen 1
OnDemand Objekte speichern Allgemeine Java-Themen 8
B Objekte anhand von Properties file Allgemeine Java-Themen 41
U Tiefe Objekte schreiben Allgemeine Java-Themen 1
R Abstrakte Basisklasse und instanzierte Objekte der abgeleiteten Klasse als Basisklasse übergeben Allgemeine Java-Themen 2
E 3D Objekte in 2D Bild finden Allgemeine Java-Themen 5
J Daten aus GUI auslesen und in Objekte umwandeln Allgemeine Java-Themen 6
F FileOutput/Input Objekte Allgemeine Java-Themen 6
OnDemand Objekte serialisieren Allgemeine Java-Themen 3
J unterschiedliche Objekte, selbe getter und setter Allgemeine Java-Themen 15
L Lib gesucht: Java-Objekte mit JSON Allgemeine Java-Themen 2
E Best Practice Verdammt große Objekte Allgemeine Java-Themen 10
B Mehrere Objekte verschlüsselt serialisieren Allgemeine Java-Themen 6
G Liste anzahl der gleichen Objekte Allgemeine Java-Themen 6
N Objekte an eine andere Applikation übergeben Allgemeine Java-Themen 3
N 2 Objekte zu einer Gruppe zusammenfügen Allgemeine Java-Themen 7
M Instanzierte Objekte in XML Dokument speichern Allgemeine Java-Themen 3
B Verschiedene Objekte in Abhängigkeit eines Typs instanziieren. Allgemeine Java-Themen 17
K Input/Output Im Programm instanzierte Objekte Speichern und laden Allgemeine Java-Themen 3
S OOP Objekte als Return-Werte: Einen Klon zurückgeben oder Instanz auf das Feld? Allgemeine Java-Themen 10
H Objekte Serialisiert speichern Allgemeine Java-Themen 10
L MouseListener für viele Objekte erstellen Allgemeine Java-Themen 16
5 Objekte Sortieren lassen Allgemeine Java-Themen 7
N Objekte aus Array Inhalt erzeugen Allgemeine Java-Themen 8
L Input/Output Textdatei in Objekte überführen? Allgemeine Java-Themen 4
R Input/Output Objekte speichern ohne überschreiben Allgemeine Java-Themen 7
A Collections HashMap.containsKey findet keine immutablen Objekte Allgemeine Java-Themen 3
H Threads Thread stirbt aber Objekte in ihm leben weiter?! Allgemeine Java-Themen 9
M Java Objekte in XML mit JAXB Allgemeine Java-Themen 9
C Strings und JSON Objekte so klein wie möglich im Speicher ablegen Allgemeine Java-Themen 5
H COM-Objekte/ AktiveX Objekte Allgemeine Java-Themen 4
C Script für Website mit Objekte Ausblenden Allgemeine Java-Themen 3
M Txt einlesen & Objekte erzeugen Allgemeine Java-Themen 2
X Objekte aus TableModel serialisieren und deserialisieren Allgemeine Java-Themen 4
T ObjectInputStream - Arrayliste, die unbekannte Objekte enthält Allgemeine Java-Themen 9
B class dateien "einlesen" und objekte erzeugen Allgemeine Java-Themen 6
D Grafische Objekte zeichnen Allgemeine Java-Themen 4
A Wie zur Laufzeit auf Objekte zugreifen Allgemeine Java-Themen 7
F Referenzen auf Objekte Allgemeine Java-Themen 5
H Eclipse und Objekte Allgemeine Java-Themen 6
S Objekte die Objekte enthalten: Keine Vererbung Allgemeine Java-Themen 4
E Objekte in einer Liste suchen. Allgemeine Java-Themen 4
I Über eine Liste iterieren und Objekte löschen. Wie löst man das sauber? Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben