# doppelte Elemente in HashSet



## Faruun (2. Okt 2007)

Hallo liebe Gemeinde,

ich habe eine Frage zu HashSets, bzw. scheinbar einen Gedankenfehler. Trotz Recherche ist mir irgendwie nicht klar, warum in einem HashSet doppelte Elemente auftauchen.

Kurz eine kleine Beschreibung, woran es hängt:
Ich erzeuge Objekte einer Metrhode, die ich anschließend in ein HashSet schreiben will. Da es durchaus sein kann, dass Objekte mit dem selben Inhalt erzeugt werden, möchte ich doppelte Objekte nicht speichern.
Nach meinem Verständnis müsste das HashSet dieses ohnehin verhindern, oder?

Mal etwas Code, wo vielleicht klar wird, was ich meine:


```
public HashSet getFormsSearchList(){
		List formsSearchList = new ArrayList();
		HashSet doubleEliminator = new HashSet();

		try {
			List catalogs = resp.getCatalogLinks();
			for (Iterator it = catalogs.iterator(); it.hasNext();) {
				String singleCatalogLink = (String) it.next();
				CatalogResponse catalogResponse = new CatalogResponse(getPage(singleCatalogLink));
				formsSearchList.addAll(traverseFolder(folderLinks, null, Response.FORMSSEARCH_FORM_INFO_PATTERN)); // Hier kommt eine Liste mit meinen Objekte zurück, noch mit doppelten Einträgen
			}	
			
		} catch (HttpException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		for (Iterator iter = formsSearchList.iterator(); iter.hasNext();) {
			FormInfoBean element = (FormInfoBean) iter.next();
			doubleEliminator.add(element); // Hier würde ich vermuten, dass alle doppelten Objekte nicht mehr geadded werden ... scheinbar aber nicht der Fall :(
		}
		
		return doubleEliminator;
	}
```


Ich hoffe, mir kann jemand eine kleine Hilfestellung geben.

Gruß,
Faruun


----------



## Kim Stebel (2. Okt 2007)

FormInfoBean muss equals und hashCode überschreiben.


----------



## Faruun (2. Okt 2007)

Hallo Kim,

erstmal danke für die Antwort. equals() überschreibe ich bereits, allerdings verstehe ich nicht so recht, wie ich hashCode() überschreiben müsste, damit es funktioniert. Kannst Du mir da vielleicht auch noch aufs Pferd helfen?   

Gruß,
Faruun


----------



## Kim Stebel (2. Okt 2007)

das kommt auf deine FormInfoBean-Klasse an. Der Hashcode sollte für identische(laut equals) Instanzen ebenfalls identisch sein und für verschiedene Instanzen möglichst(aber nicht zwingend erforderlich) ebenfalls verschieden. Das sind aber auch schon alle Bedingungen. Je besser dein hashCode() die zweite Bedingung erfüllt, desto effektiver arbeitet das HashSet.


----------



## Wildcard (2. Okt 2007)

Aufgrund dieses Vertrages ist es wichtig, das sich dein Hashwert aus allen in equals verwendeten Attributen berechnet.


----------



## Faruun (4. Okt 2007)

Hallo,

ich habs hinbekommen. Vielen Dank für die Hilfe.

Gruß,
Faruun


----------

