Hashset - Allgemeine Fragen

Tangarama

Mitglied
Ave!

Klärt mich doch bitte mal auf...
Ich habe ein Hashset, in welches ich am Programmbeginn Strings reinlade.
Das sind viele, wobei der Begriff "viel" wie immer relativ ist. In diesem Fall roundabout 100.000 Stück.

Ich habe aber das Gefühl, dass der Hashset mit der Zeit Strings vergisst.

An der Groß-/Kleinschreibung kann es nicht liegen, da ich die Strings zuvor in Kleinbuchstaben, vor der Überprüfung und wärend des Hinzufügens, umwandele.

Gibt es eine Beschränkung bei Hashsets, oder ist der einzig limitierende Faktor hier der Arbeitsspeicher?

Regards
 

Marco13

Top Contributor
Es gibt zwar (außerhalb der Standard-API) Dinge wie WeakHashSet (und IN der API zumindest noch WeakHashMap) aber... man sollte wissen, ob man die verwendet, und wenn ja, warum....
 
S

SlaterB

Gast
in jedem Fall sollten bei Problemen mit Grenzen Exceptions fliegen, das etwas unbemerkt weggekehrt wird, kommt nicht vor
 

faetzminator

Gesperrter Benutzer
Genau, es gäb da z.B. den OutOfMemoryError. Oder vielleicht eine ArrayIndexOutOfBoundsException oder IllegalArgumentException, weil ein Zähler einen Overflow kriegt. Dies sollte aber nicht vor [c]Integer.MAX_VALUE[/c] Elementen geschehen.
 
B

bERt0r

Gast
Wenn du in ein HashSet 2 mal den gleichen String einfügst wird der alte still und heimlich ersetzt. Allerdings gibt dir die get Funktion glaube ich einen Rückgabewert zurück, mit dem du das prüfen kannst.
 

Tangarama

Mitglied
Recht herzlichen Dank fuer Eure Ausfuehrungen, Antworten, wie auch immer.

Entfernungen werden uebrigens (geht um Stoppwoerter fuer Textmining) nicht vorgenommen, sondern das Hashset waechst weiter an. Werde die Sache mal genauer unter die Lupe nehmen.
 

Dekker

Bekanntes Mitglied
Recht herzlichen Dank fuer Eure Ausfuehrungen, Antworten, wie auch immer.

Bin mir nicht sicher was so eine sarkastische Antwort auf die Posts soll. Immerhin gibts du ein absolutes Minimum and Problembeschreibung raus und erhälst genau das als Anwort was zur Frage passt. Fakt ist, das ein HashSet keine Werte vergisst.

Entfernungen werden uebrigens (geht um Stoppwoerter fuer Textmining) nicht vorgenommen, sondern das Hashset waechst weiter an. Werde die Sache mal genauer unter die Lupe nehmen.

Hat ja auch keiner behauptet. Es ging aber darum, dass bei gleichem Schlüssel beim einfügen der alte Eintrag überschrieben wird. Benutzt ihr eine eigene Hashfunktion oder benutzt ihr komplett den gegebenen Standard?
 

Wildcard

Top Contributor
Hat ja auch keiner behauptet. Es ging aber darum, dass bei gleichem Schlüssel beim einfügen der alte Eintrag überschrieben wird. Benutzt ihr eine eigene Hashfunktion oder benutzt ihr komplett den gegebenen Standard?
Das Ersetzen eines vorhanden Entries spielt in der Kombination HashSet + String allerdings keine Rolle. Strings sind immutable und wenn ein String mit einem identischen String ersetzt wird, ist das völlig irrelevant.
Eine eigene fehlerhafte Hashfunktion fällt ebenfalls aus da String final ist.
Bleiben genau 2 Möglichkeiten:
1. du irrst dich
2. du entfernst Strings aus dem Set
 
H

help11

Gast
Das Ersetzen eines vorhanden Entries spielt in der Kombination HashSet + String allerdings keine Rolle. Strings sind immutable und wenn ein String mit einem identischen String ersetzt wird, ist das völlig irrelevant.

nein, das ist zu einfach gedacht. Verschiedene Threads könnten einen String aus der Set hohlen, um als Monitor zu benutzen; ändert sich zwischenzeitlich das String-Objekt, könnten verschiedene Threads auf verschiedenen Objekten synchronisieren. Ich hab zwar noch nie gesehen, dass jemand so was macht, aber denkbar ist alles.

Jedenfalls ist durch Ersetzen (gleiches Element nochmal einfügen) das Element ja nicht "vergessen"...

("Wie lautet das Ergebnis, wenn du von der Zahl 128 die Zahl 256 subtrahierst?" - viel zu kompliziert, ich schreib immer 128 :D )
 

Tangarama

Mitglied
Bin mir nicht sicher was so eine sarkastische Antwort auf die Posts soll. Immerhin gibts du ein absolutes Minimum and Problembeschreibung raus und erhälst genau das als Anwort was zur Frage passt. Fakt ist, das ein HashSet keine Werte vergisst.

Sarkasmus?

Du das war ein ehrliches Danke an Alle die darauf geantwortet haben.
Schliesslich ist es, wie Du selbst sagtest, bei so spaerlichen Informationen nicht selbstverstaendlich, dass sich jemand die Zeit nimmt und antwortet. Sarkasmus war da keiner drin.

Ich habe genau die Antworten erhalten, die ich haben wollte. Mein Gefuehl, dass die Hashsets was vergessen, scheint demnach nur ein Gefuehl zu sein, oder ich habe irgendwo einen noch nicht entdeckten Bug im Programm.

Lieben Gruss - der auch ehrlich gemeint ist
 

Dekker

Bekanntes Mitglied
Sarkasmus?

Du das war ein ehrliches Danke an Alle die darauf geantwortet haben.
Schliesslich ist es, wie Du selbst sagtest, bei so spaerlichen Informationen nicht selbstverstaendlich, dass sich jemand die Zeit nimmt und antwortet. Sarkasmus war da keiner drin.

Dann habe ich das wohl einfach Missverstanden. Sorry ;)

Habe auch gerade gemerkt das ich HashMap und HashSet verwechselt habe :oops:
 

Wildcard

Top Contributor
nein, das ist zu einfach gedacht. Verschiedene Threads könnten einen String aus der Set hohlen, um als Monitor zu benutzen; ändert sich zwischenzeitlich das String-Objekt, könnten verschiedene Threads auf verschiedenen Objekten synchronisieren. Ich hab zwar noch nie gesehen, dass jemand so was macht, aber denkbar ist alles.

Das wäre dann wohl eher ein Designfehler... ;)

Jedenfalls ist durch Ersetzen (gleiches Element nochmal einfügen) das Element ja nicht "vergessen"...
Nur darum geht es ja in dem Problem. Betrachtet man nur den Inhalt des Sets, spielt keine Rolle ob ein String einen anderen, gleichen String verdrängt hat. Von aussen sieht alles noch genauso aus und ein Iterator liefert das gleiche Ergebnis. Ersetzen mit einer identischen String Instanz kann also keine fehlenden Einträge erklären.
 
H

help11

Gast
(Obwohl HashSet auch iterable ist, man kommt also auf Biegen und Brechen auch an die Elemente heran ;) )

Das wäre dann wohl eher ein Designfehler... ;)

Meinte nur, dass es das gibt, Synchronisation auf immutable objects. Iwie muss ich mir eingestehen, so was ähnliches auch schon mal gemacht zu haben. ;)

@Tangarama: Jetzt müsste deine Frage hinreichend beantwortet worden sein. Komm mit mehr Details ans Licht, dann helfen wa weiter.
 
B

bERt0r

Gast
Also dieser Code hier:
Java:
public static void main(String args[])
	{
		HashSet<String> hs=new HashSet<String>();
		boolean contains;
		contains=hs.add("Hallo");
		System.out.println(contains);
		contains=hs.add("Hallo");
		System.out.println(contains);
		System.out.println(hs+" "+hs.size());
	}
liefert bei mir folgende Ausgabe:
true
false
[Hallo] 1

Die Problematik, dass bei gleichen Strings ersetzt wird besteht sehr wohl. Der Rückgabewert von add sagt aus, ob das Objekt bereits vorhanden war.
 

Dekker

Bekanntes Mitglied
Die Problematik, dass bei gleichen Strings ersetzt wird besteht sehr wohl. Der Rückgabewert von add sagt aus, ob das Objekt bereits vorhanden war.

Aber nicht bei dem was der TE will. Er will ja einfach nur erstmal seine Menge füllen. Ob da Elemente doppelt eingefügt und dabei überschrieben werden oder sonstiges ist ja erstmal egal. Hauptsache es steht am Ende drin.
 
H

help11

Gast
Die Problematik, dass bei gleichen Strings ersetzt wird besteht sehr wohl. Der Rückgabewert von add sagt aus, ob das Objekt bereits vorhanden war.

Du verstehst doch gar nicht, worum es hier geht. Es geht um den Zustand der Set mitsamt all ihren Elementen. Und dabei ist es nun mal so, dass doppelt eingefügte Elemente nicht dazu führen, dass alle Elemente "vergessen" werden. Und dass in einer neuen, leeren Set keine Elemente vorhanden sind, ist ja eine wahnsinnige Neuigkeit.
 
B

bERt0r

Gast
Also ich dachte dass genau das sein Problem ist, weil er von 100.000 Strings gesprochen hat, und von denen sind wohl ein paar weniger in der Hashset gewesen. Ich wage mal zu behaupten, er hat sie nicht einzeln durchgeschaut ob einer fehlt.
 
Ä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
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
E Bäume/ allgemeine Fragen Java Basics - Anfänger-Themen 21
S Allgemeine Java Codes lesen und verstehen Java Basics - Anfänger-Themen 7
S Allgemeine Frage über Generics und Vererbungen Java Basics - Anfänger-Themen 5
Kirby.exe Allgemeine Frage Java Basics - Anfänger-Themen 3
G Schach in Java - Allgemeine Frage zur Architektur Java Basics - Anfänger-Themen 7
X Allgemeine Hashtabelle - wie? Java Basics - Anfänger-Themen 4
TechGirl LinkedList - kurze allgemeine Frage Java Basics - Anfänger-Themen 17
M Allgemeine Java-Frage anhand bspw. Eclipse Java Basics - Anfänger-Themen 4
D Rekursion Allgemeine Fragen Java Basics - Anfänger-Themen 2
J Allgemeine Fragen zur GUI Java Basics - Anfänger-Themen 1
M Erste Schritte Allgemeine Fragen Java Basics - Anfänger-Themen 4
B KeyListener als allgemeine Methode Java Basics - Anfänger-Themen 5
S Allgemeine Fragen Java Basics - Anfänger-Themen 9
Luk10 OOP Sehr allgemeine Schnittstelle Java Basics - Anfänger-Themen 19
S allgemeine verständnisschwierigkeit Java Basics - Anfänger-Themen 5
G allgemeine Ressourcen-Verwaltung... Java Basics - Anfänger-Themen 3
T Allgemeine Frage Java Basics - Anfänger-Themen 3
C Sortierverfahren - allgemeine Lösung? Java Basics - Anfänger-Themen 9
J Allgemeine Fragen zur Programmierung Java Basics - Anfänger-Themen 36
S JDK installieren Allgemeine Fragen Java Basics - Anfänger-Themen 3
J Allgemeine Frage zu GUI´s in Java Java Basics - Anfänger-Themen 6
J [Neuling] Allgemeine Fragen zu Java Java Basics - Anfänger-Themen 20
S OOP Allgemeine Frage zu OOP Java Basics - Anfänger-Themen 4
A Allgemeine Frage zur Sichtbarkeit "private" Java Basics - Anfänger-Themen 5
U Arrays allgemeine Frage Java Basics - Anfänger-Themen 3
A Allgemeine Fragen zu Java Java Basics - Anfänger-Themen 7
G Allgemeine Frage-GUI Java Basics - Anfänger-Themen 10
J Methode, Allgemeine Frage Java Basics - Anfänger-Themen 5
W Allgemeine Fragen Java Basics - Anfänger-Themen 11
G GridLayout Allgemeine Fragen Java Basics - Anfänger-Themen 2
I Allgemeine fragen zu Socket server Java Basics - Anfänger-Themen 6
G Login - Allgemeine Fragen Java Basics - Anfänger-Themen 6
G Allgemeine Schnittstelle für Ausgabe? Java Basics - Anfänger-Themen 5
S Allgemeine Frage zu Sockets Java Basics - Anfänger-Themen 23
A Allgemeine Fragen zu Java Java Basics - Anfänger-Themen 10
W allgemeine Fragen Java Basics - Anfänger-Themen 6
O allgemeine Exceptions abfangen Java Basics - Anfänger-Themen 17
E Allgemeine Anfrage Java lernen Java Basics - Anfänger-Themen 3
D Allgemeine Objekte abspeichern Java Basics - Anfänger-Themen 9
Zrebna Fragen zu einem Klassendiagramm Java Basics - Anfänger-Themen 8
H Fragen zu Wrapperklassen Java Basics - Anfänger-Themen 29
S Best Practice Fragen zu Projektstruktur einer Datenbank-Abfrage-App (MVC) Java Basics - Anfänger-Themen 13
A Bei VierGewinnt fragen ob man gegen CPU oder Menschen spielen will. Java Basics - Anfänger-Themen 7
A Bei VierGewinnt vorher fragen, ob man gegen den Computer spielen möchte oder gegeneinander. Java Basics - Anfänger-Themen 1
A Bei VierGewinnt fragen, ob man gegen den Computer spielen möchte oder gegeneinander Java Basics - Anfänger-Themen 1
sserio Wie kann man nach einer Klasse fragen? Java Basics - Anfänger-Themen 12
G Fragen zu Kompelierfehler in Aufgabe. Java Basics - Anfänger-Themen 25
O Falsche Antworten zu Fragen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben