HashSet<String> das selbe oder das gleiche?

Markey

Mitglied
Hallo ihr lieben,

ein HashSet verhindert ja im Regelfall, dass gleiche Objekte der Datensammlung hinzugefügt werden.

Mich würde interessieren wie sich ein HashSet mit dem "Typ" <String> verhält!?
Sehe ich dass richtig, dass der gleiche Text in verschiedenen Variablen mehrmals hinzugefügt werden kann?

Kann ich das ganze irgendwie umgehen um nur auf Gleichartigkeit und nicht auf Objekt ID zu prüfen`ß

Vielen Dank.

Markey
 
Es gibt in Java zwei Möglichkeiten Objekte miteinander zu vergleichen. Einmal über die Methode equals (vergleicht den Inhalt eines Objekts, also ob sie identisch sind), und einmal über den ==-Operator (vergleicht die Referenzen der Objekte, also ob es ein und dasselbe Objekt ist).

Strings nehmen eine Sonderrolle in der JVM ein. Diese prüft nämlich ob ein String schon existiert und falls ja legt sie nicht ein neues String-Objekt an, sonder nur eine neue Referenz auf das alte Objekt. Das macht sie allerdings nicht immer sondern nur manchmal.
 
In der Klasse java.lang.String sind die Methoden equals() und hashCode() bereits implementiert. D.h. beim hinzufügen eines Strings mit gleichem Inhalt wie schon im HashSet enthalten, wird der String nicht hinzugefügt.
 
Hallo ihr lieben,

ein HashSet verhindert ja im Regelfall, dass gleiche Objekte der Datensammlung hinzugefügt werden.

Mich würde interessieren wie sich ein HashSet mit dem "Typ" <String> verhält!?
Sehe ich dass richtig, dass der gleiche Text in verschiedenen Variablen mehrmals hinzugefügt werden kann?


nein. bei strings ist equals mit einem compareTo implementiert und der hashCode wird aus dem Stringinhalt gebildet. Somit geht das nicht.


Kann ich das ganze irgendwie umgehen um nur auf Gleichartigkeit und nicht auf Objekt ID zu prüfen`ß


Was soll das bringen?
 
Kann ich das ganze irgendwie umgehen um nur auf Gleichartigkeit und nicht auf Objekt ID zu prüfen`ß
Es gibt eine IdentityHashMap, allerdings kein IdentitySet. Das müsstest du selbst implementieren, allerdings sollte das sehr einfach machbar sein durch Subclassing oder indem du intern eine IdentityHashMap verwendest.
 

Zurück
Oben