HashSet mit eigenen Datentypen

Status
Nicht offen für weitere Antworten.

Povlsen84

Mitglied
Hallo,

ich möchte ein HashSet verwenden, dass ich mit eigenen Datentypen füttern möchte. Sofern sie sich inhaltlich doppeln, sollen sie entsprechend nicht eingefügt werden. Weder die Implementierung des Comparable-Inferfaces noch 'ne schlicht angepasste "equals" Methode führen zum gewünschten Resultat.

Was mach ich falsch?

Grüße aus Berlin,
Stephan

Java:
package comparable;
public class Daten implements Comparable<Daten>{
	int i = -1;	
	public Daten(){	
	}
	
	public int compareTo(Daten o) {
		if(this.i == o.i) 
			return 0;
		else 
			return -1;
	}
	
	public boolean equals(Daten o){
		if(this.i == o.i)
			return true;
		else
			return false;
	}

Und

Java:
package comparable;
import java.util.HashSet;

public class Sammelklasse extends HashSet<Daten> {

	public Sammelklasse(){
		Daten d1 	= new Daten();
		d1.i 		= 5;
		
		Daten d2 	= new Daten();
		d2.i 		= 6;
		
		Daten d3	= new Daten();
		d3.i		= 5;

		add(d1);
		add(d2);
		add(d3);
		
		System.out.println(this.size());
	}
}
 

Povlsen84

Mitglied
Der naive Ansatz funktioniert auch nicht. Am Beispiel berechne ich den neuen hashCode halt nur aus dem einen Attribut i.

Steh ein wenig auf'm Schlauch :-/

Java:
package comparable;

public class Daten implements Comparable<Daten>{
	
	Integer i = -1;
	

	public Daten(){	
	}
	
	public int compareTo(Daten o) {
		if(this.i == o.i) 
			return 0;
		else 
			return -1;
	}
	
	public boolean equals(Daten o){
		if(this.i == o.i)
			return true;
		else
			return false;
	}
	
	public int hashCode() {
		return i.hashCode();
	}
}
 

benders

Aktives Mitglied
Netbeans hat mir diesenCode erzeugt, damit geht es!
Code:
@Override
    public int hashCode() {
        return i.hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Daten other = (Daten) obj;
        if (this.i != other.i && (this.i == null || !this.i.equals(other.i))) {
            return false;
        }
        return true;
    }

Bei Deinem Entwurf weigert sich die Sammelklasse nur beim Versuch zweimal das selbe Objekt einzufügen.
 

Ebenius

Top Contributor
Wandele i bitte wieder in einen int um, oder löse die '=='-Operatoren in equals(...)-Vergleiche um. Das spielt zwar genau in Deinem Beispiel keine Rolle, bei Zahlenwerten größer 127 oder kleiner 128 wird es sonst aber ganz sicher nicht funktionieren.

Das Problem ist Deine equals(Daten)-Methode. Du musst equals(Object) überschreiben und nicht mit equals(Daten) überladen. Hilft Dir die Erklärung?

Ebenius
 

Povlsen84

Mitglied
Jip, danke, funktioniert.

Wobei mich interessiert warum gerade 127 bzw. -128 die Grenzen für "problemloses" funktionieren ist :)

Ist zwar nur 'n sinniger Beispielcode, aber wenn ich schon dabei bin, warum nicht auch gleich das verstehen :)
 

musiKk

Top Contributor
Die Werte von -128 bis 127 werden gecached. Dadurch sind das immer die gleichen Instanzen und diese können erfolgreich per == verglichen werden. Ansonsten werden eigene Instanzen erstellt, die trotz gleicher Zahl verschieden sind.
Java:
Integer a1 = Integer.valueOf(5);
Integer a2 = Integer.valueOf(5);

Integer b1 = Integer.valueOf(200);
Integer b2 = Integer.valueOf(200);

System.out.println(a1 == a2);
System.out.println(b1 == b2);
gibt
Code:
true
false

Schau Dir mal den Quelltext der valueOf()-Methode an, da sieht man das gleich.
 
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
berserkerdq2 Geht collections.sort bei allen? Linkedhashset, ArrayList, HashSet etc. Java Basics - Anfänger-Themen 4
volcanos HashSet und Iterator -> Falsche Sortierreihenfolge ? Java Basics - Anfänger-Themen 18
D Erste Schritte Code verstehen - HashSet Java Basics - Anfänger-Themen 8
J Hashset Java Basics - Anfänger-Themen 13
J HashSet Methode contains liefert false (hash Methode überschrieben) Java Basics - Anfänger-Themen 3
W Element aus HashSet in String umformen Java Basics - Anfänger-Themen 7
T HashSet in List-Object Java Basics - Anfänger-Themen 5
C Auf einzelne Werte aus HashSet zugreifen Java Basics - Anfänger-Themen 10
J Klassen HashSet, TreeSet: unregelmäßige Zahlenreihen beim Befüllen Java Basics - Anfänger-Themen 7
T Methoden HashSet Objekt mit Zufallszahlen befüllen Java Basics - Anfänger-Themen 3
J Verstehe meine HashSet Ausgabe nicht Java Basics - Anfänger-Themen 5
W Verknüpfung von Räumen mit Hashset Java Basics - Anfänger-Themen 10
J HashSet contain Methode funktioniert nicht wie gewollt Java Basics - Anfänger-Themen 7
M Collections HashSet verständnisproblem Java Basics - Anfänger-Themen 9
R Hashset.add(Array) liefert immer true? Java Basics - Anfänger-Themen 23
Mrtwomoon Collections Hashset elemente ohne Eckigeklammer ausgeben Java Basics - Anfänger-Themen 9
M Collections Problem bei Überschreibung von hashcode() und equals() bei Hashset-Implementierung Java Basics - Anfänger-Themen 5
A Elemente in HashSet enthalten oder nicht Java Basics - Anfänger-Themen 6
A HashSet (oder besser geignetes) Java Basics - Anfänger-Themen 14
T Hashset - Allgemeine Fragen Java Basics - Anfänger-Themen 19
J So ähnlich wie HashSet Java Basics - Anfänger-Themen 2
D HashSet vs Liste Java Basics - Anfänger-Themen 5
T HashSet Java Basics - Anfänger-Themen 3
F suche Elemente in HashSet Java Basics - Anfänger-Themen 5
E Collections HashSet - Ausgabe sortiert? Java Basics - Anfänger-Themen 3
J HashSet Fehlerhaft Java Basics - Anfänger-Themen 10
J HashSet Implementierung Java Basics - Anfänger-Themen 16
D Problem mit HashSet Java Basics - Anfänger-Themen 12
darekkay Datentypen HashSet bzw. LinkedList mit Werten initialisieren Java Basics - Anfänger-Themen 3
B Hashset iterieren problem Java Basics - Anfänger-Themen 3
C HashSet Problem Java Basics - Anfänger-Themen 3
DasBrot Datentypen HashSet contains() Java Basics - Anfänger-Themen 3
F HashSet u. LinkedHashSet Zugriff auf Werte? Java Basics - Anfänger-Themen 2
F HashSet und LinkedHashSet Instanzierung warum so? Java Basics - Anfänger-Themen 7
M HashSet.contains() Java Basics - Anfänger-Themen 2
N Map<String, HashSet<String>> Umwandeln in Map<String, ArrayList<String>> Java Basics - Anfänger-Themen 14
neurox Limit bei HashSet? Java Basics - Anfänger-Themen 2
G HashSet vs. TreeSet Java Basics - Anfänger-Themen 3
G hashset überschreibt werte bei add Java Basics - Anfänger-Themen 1
G Wie mach ich ein HashSet für eigene Objecte? Java Basics - Anfänger-Themen 9
M HashSet Initialisierungsgröße? Java Basics - Anfänger-Themen 5
F doppelte Elemente in HashSet Java Basics - Anfänger-Themen 5
G Probleme mit HashSet Java Basics - Anfänger-Themen 5
S HashSet in HashMap, Zugriff Java Basics - Anfänger-Themen 3
G Zahlen aus HashSet in ein int Array übergeben Java Basics - Anfänger-Themen 15
G Hashset verknüpfen mit BufferedReader Java Basics - Anfänger-Themen 18
L Was ist ein HashSet? Java Basics - Anfänger-Themen 33
G HashSet Java Basics - Anfänger-Themen 21
P HashSet und Referenzen Java Basics - Anfänger-Themen 9
B Warum hat HashSet kein get(Object o) ? Java Basics - Anfänger-Themen 8
H umwandeln zu Hashset ?! Java Basics - Anfänger-Themen 7
I Liste von Infos von einer eigenen Annotation in Liste speichern Java Basics - Anfänger-Themen 0
L Math.exp also eigenen Algorithmus Java Basics - Anfänger-Themen 2
B Email Client in der eigenen Software einbauen Java Basics - Anfänger-Themen 3
M Ist es möglich den Login in eine Drittseite für den eigenen zu benutzen? Java Basics - Anfänger-Themen 1
C Tabs in JTabbedPane wechseln, wenn Tabs in eigenen Klassen sind Java Basics - Anfänger-Themen 2
K Hashtable mit eigenen Konstruktor Java Basics - Anfänger-Themen 2
K JUnit: Objekte von eigenen Klassen vergleichen...geht nicht Java Basics - Anfänger-Themen 5
A mehrere Panels in eigenen Klasssen in einem Frame Java Basics - Anfänger-Themen 16
S Methoden eine Instanz einer eigenen Klasse als parameter übergeben Java Basics - Anfänger-Themen 9
Thallius Best Practice Events zwischen eigenen Klassen Java Basics - Anfänger-Themen 2
S Eigenen Listener zu eigenen Button! Java Basics - Anfänger-Themen 5
kaoZ Methoden Eigenen Sortier Methode erstellen Java Basics - Anfänger-Themen 5
H Eigenen Listener einbauen Java Basics - Anfänger-Themen 5
O Eigenen Addon-Loader machen? Java Basics - Anfänger-Themen 33
Pentalon Eclipse JUNO keine Vorschläge von Methoden bzw. Interfaces der eigenen Klassen Java Basics - Anfänger-Themen 5
Y Collection der eigenen Klasse Java Basics - Anfänger-Themen 10
M Größer der eigenen .jar ermitteln Java Basics - Anfänger-Themen 4
S JTabbedPane jeder Tab in einer eigenen java Datei? Java Basics - Anfänger-Themen 3
P Klassen Instanz einer Klasse in ihrer eigenen Definition erzeugen? möglich? Java Basics - Anfänger-Themen 4
L eigenen Baum schreiben Java Basics - Anfänger-Themen 5
E incompatible types bei eigenen Klassen Java Basics - Anfänger-Themen 7
W Datentypen Operatoren für eigenen Datentyp nutzen Java Basics - Anfänger-Themen 2
A Array einer eigenen Klasse sortieren Java Basics - Anfänger-Themen 11
N Eigenen Codesinn vergessen Java Basics - Anfänger-Themen 6
xehpuk In JUnit über eigenen Thread testen Java Basics - Anfänger-Themen 3
D Pfad zu "Eigenen Dateien" ermitteln Java Basics - Anfänger-Themen 8
M Verständnis-Probleme mit eigenen Klassen Java Basics - Anfänger-Themen 2
A Null Pointer Exception beim Erstellen eines Arrays aus einer eigenen Klasse Java Basics - Anfänger-Themen 3
F Klasse bzw Objekt in eigenen Thread auslagern Java Basics - Anfänger-Themen 3
M Datentypen Eigenen Datentyp toArray() Java Basics - Anfänger-Themen 4
C0FFEE Anwendung soll eigenen Dateinamen referenzieren Java Basics - Anfänger-Themen 13
Benji0815 Eigenen Listener schreiben Java Basics - Anfänger-Themen 13
Spin Eigenen Abstrakten Datentypen Java Basics - Anfänger-Themen 28
R eigenen Event schreiben Java Basics - Anfänger-Themen 16
S Vector von eigenen Klassen Java Basics - Anfänger-Themen 2
A Mehrere Instanzen einer eigenen Klasse in einem Array Java Basics - Anfänger-Themen 5
D JWS - Resourcen aus eigenen Jar laden? Java Basics - Anfänger-Themen 3
S Java Applet - Verbindung zum Eigenen Server Java Basics - Anfänger-Themen 2
E ArrayList mit eigenen typ serialisieren? Java Basics - Anfänger-Themen 1
G Protected Variablen außerhalb der eigenen Klassenhierarchie sichtbar Java Basics - Anfänger-Themen 5
S Addition von eigenen Objekten mit "+" Symbol Java Basics - Anfänger-Themen 19
M Einfügen eines eigenen Component Java Basics - Anfänger-Themen 21
A Im Chat eigenen Beitrag in Farbe zeigen Java Basics - Anfänger-Themen 8
G Eigenen Code mit einer Lizenz schützen Java Basics - Anfänger-Themen 2
G Vector eigenen Typs mit Daten füllen Java Basics - Anfänger-Themen 20
J Verwendung von eigenen Klassen in JSP Java Basics - Anfänger-Themen 2
B Ergenzungen und oder Updates von eigenen Anwendungen Java Basics - Anfänger-Themen 4
R Einfügen einer eigenen methode in ein Panel Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben