HashSet (oder besser geignetes)

Andi_CH

Top Contributor
Ich bin auf der Suche nach einer geeineten Datenstruktur.

Muss:
- Iterierbar sein
- Elemente nur einmal beinhalten

HashSet kann das alles aber ich stell mich ungeschickt an ;-)

Die gespeicherten Daten sind eine Objekte einer eigenen Klasse - what the hell muss ich in dieser überschreiben, damit Gleicheit erkannt wird?

equals() ist es nicht, compareTo() ist es nicht .... (Sind beide implementiert werden aber nicht aufgerufen)

Wer hilft mir auf die Sprünge?
 
T

Tomate_Salat

Gast
Ich bin mir nicht sicher. Aber aufgrund des Namens schätze ich mal: es wird der Hash-Wert verglichen.

Edit Meine Vorredner sind der gleichen Meinung, also hatte ichs noch richtig in Erinnerung :)
 

ARadauer

Top Contributor
ha lustig sehe garade dass HashSet intern eine HasMap verwendet

Java:
 public V put(K key, V value) {
        if (key == null)
            return putForNullKey(value);
        int hash = hash(key.hashCode());
        int i = indexFor(hash, table.length);
        for (Entry<K,V> e = table[i]; e != null; e = e.next) {
            Object k;
            if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
                V oldValue = e.value;
                e.value = value;
                e.recordAccess(this);
                return oldValue;
            }
        }

        modCount++;
        addEntry(hash, key, value, i);
        return null;
    }

key.hashCode()... das ist es... aber was speichert er dann als value...


Java:
    // Dummy value to associate with an Object in the backing Map
    private static final Object PRESENT = new Object();

ok Josh warum nicht...
 

Andi_CH

Top Contributor
Danke!

Wenn hashCode() drin ist, wird auch equals() aufgerufen - interessant. Warum nicht gleich so :D

Jetzt kommt einfach die Frage auf, wie ich aus einem String und einem int einen guten HashCode "bastle", aber das scheint gar nicht so kritisch - wenn ich es richtig sehe wird bei gleichen HashCode die equals-Methode aufgerufen.

EDIT: Zeile 8 im Code bei ARadauer ....
 
M

maki

Gast
ha lustig sehe garade dass HashSet intern eine HasMap verwendet
Das ist gar nicht so unüblich ;)

Ansonsten haben darekkay und njans natürlich recht, wenn man sich an equals wagt, muss man auch hashcode überschreiben, und umgekehrt.

Jetzt kommt einfach die Frage auf, wie ich aus einem String und einem int einen guten HashCode "bastle", aber das scheint gar nicht so kritisch - wenn ich es richtig sehe wird bei gleichen HashCode die equals-Methode aufgerufen.
String haben schon einen guten hashcode ;)
equals wird nach gleichem hashcode aufgerufen um Kollisionen zu erkennen.
 

Andi_CH

Top Contributor
Eclipse:
Rechtsklick->Source->generate HashCode and Equals.

Das ist aber ein echt geiles Feature! Ich glaub das stimmt sogar was da generiert wird ;)

Woher wohl die 31 kommt ???:L

Java:
private String serverName;
private int port;

@Override
public int hashCode() {
	final int prime = 31;
	int result = 1;
	result = prime * result + port;
	result = prime * result + ((serverName == null) ? 0 : serverName.hashCode());
	return result;
}

EDIT und was passiert wohl wenn port = MAXINT ist ??? na ja ....
 
Zuletzt bearbeitet:

Andi_CH

Top Contributor
Hä??? Ich hab gesagt = MAXINT nicht grösser als MAXINT.

Bin halt Ada geschädigt - ich erwarte immer Exceptions wenn irgendwo irgendwas überläuft ...
 
Ä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
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
Povlsen84 HashSet mit eigenen Datentypen Java Basics - Anfänger-Themen 6
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
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
S Was ist "besser"? Java Basics - Anfänger-Themen 5
R Uebersichtlicher bzw. besser Programmieren Java Basics - Anfänger-Themen 13
Shizmo Methoden Formel besser implementieren Java Basics - Anfänger-Themen 8
J Texte für Java Programmierung besser verstehen? Java Basics - Anfänger-Themen 2
S Code richtig / besser machbar? (Nicht sicher, ob Code selbst falsch ist) Java Basics - Anfänger-Themen 4
B Ist MyFrame oder JFrame besser? Java Basics - Anfänger-Themen 3
O Java und JSF besser verstehen Java Basics - Anfänger-Themen 1
M Komplexe Datenauswertungen in Java oder besser auf Datenbankseite ausführen? Java Basics - Anfänger-Themen 4
I Wie diesen Code besser schreiben? (Zeitformate) Java Basics - Anfänger-Themen 2
0 OOP Attributwerte besser im Konstruktor oder vorher zuweisen? Java Basics - Anfänger-Themen 6
A Besser Programmieren Java Basics - Anfänger-Themen 15
L Wo anfangen um besser zu werden Java Basics - Anfänger-Themen 13
L Erste Schritte Sollte ich hier lieber Cases verwenden oder wäre eine If-Bedingung besser? Java Basics - Anfänger-Themen 6
O String-Prüfung: Was ist besser/schneller? Java Basics - Anfänger-Themen 15
O Grundsätzliches: Besser extend oder instanziieren? Java Basics - Anfänger-Themen 4
S OOP Java Kommentare, Programm besser verstehen Java Basics - Anfänger-Themen 6
C Soundwiedergabe in einem Thread - Speicher besser bereinigen Java Basics - Anfänger-Themen 3
A Besser als instanceof Java Basics - Anfänger-Themen 6
H Serialization: Was ist besser(schneller) Binary <-> XM Java Basics - Anfänger-Themen 2
X besser als System.arraycopy(.) Java Basics - Anfänger-Themen 5
G Was würdet ihr besser/anders machen? Java Basics - Anfänger-Themen 9
M Welche Schleife ist besser? Java Basics - Anfänger-Themen 6
H ActionListener - was ist besser. Java Basics - Anfänger-Themen 7
M wie kann man diese Funktion besser machen ? Java Basics - Anfänger-Themen 3
G konkretes beispiel: interface hier besser als abstrakte kl. Java Basics - Anfänger-Themen 4
G String-Vergleich: Was ist besser "equals()" oder & Java Basics - Anfänger-Themen 4
megachucky Was kann ich besser / sinnvoller machen bei meinem code Java Basics - Anfänger-Themen 7
S Datentypen geignetes java konstrukt gesucht Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben