# Hashmap durchsuchen



## jack26 (6. Dez 2007)

Hallo,

kurze Frage.

Ich habe hir folgende Klasse:

```
import java.util.*;

public class Anwendung {

	public static void main(String[] args) {
		HashMap<Artikel,Integer> lager = new HashMap<Artikel,Integer>();
		
		Tiernahrung hundekuchen = new Tiernahrung(12345,200,"Hundekuchen");
		
		lager.put(hundekuchen, hundekuchen.getArtikelNr());

		
		Iterator it = lager.entrySet().iterator(); 
	    while (it.hasNext()) {
	      Map.Entry entry = (Map.Entry)it.next();
	      if(entry.getValue()==(Integer)12345) 
	    	  System.out.println(((Artikel) entry.getKey()).getBeschreibung());
	  	      
	    };
	    
	}
}
```

Ich lege hier in meiner Hashmap ein Objekt von Tiernahrung ab, plus dessen Artikelnummer.
Ich laufe dann mit dem Iterator über meine Hashmap lager und will nach der Artikelnummer 12345 suchen, sprich ist ein Objekt in meiner Map enthalten, welches den value-Wert 12345 hat.
Nur leider funktioniert das bei mir nicht, er gibt mir nämlich nichts aus.
Seltsamerweise findet er dann die nummer, wenn ich nach 123 suche...

Wäre nett, wenn mit jemand helfen könnte.

Danke
Gruß


----------



## Marco13 (6. Dez 2007)

Hehe ... "Seltsamerweise" - ja, seltsam ist das wirklich   Zumindest vollkommen uni-intuitiv und willkürlich. Mit Zahlen von -128 bis 128 klappt das, aber ansonsten nicht. Schau auch mal hier:
http://www.java-forum.org/de/viewtopic.php?p=362600#362600


Der Vergleich sollte lauten

```
if(entry.getValue().intValue()==12345)
```
oder 

```
if(entry.getValue().equals(new Integer(12345)))
```
(letzeres ist unnötig aufwändig)

Wenn man Objekte vergleichen will, muss man SEHR genau überlegen, ob man sie mit 
objectA == objectB
vergleicht (d.h. ob man die Referenzen vergleichen will, um zu sehen, ob sie dasSELBE Objekt beschreiben), oder mit
objectA.euals(objectB);
um zu sehen, ob die Objekte "inhaltlich" gleich sind.


----------



## jack26 (7. Dez 2007)

Ok funktioniert, vielen Dank  :wink: 


Gruß


----------

