# alle elemente aus hashmap lesen



## search (4. Apr 2005)

hallo zusammen

wie kann ich alle elemente aus einer hashmap lesen (key und value) und danach in einer array list speichern? Mit einem iterator funzt das ja nicht, oder?

danke

mfg


----------



## semi (4. Apr 2005)

Mehr Input bitte. Speicher als was? 
Und ja, es geht mit Iterator. Siehe HashMap.values() und HashMap.keySet().iterator() oder auch HashMap.entrySet()


----------



## search (4. Apr 2005)

hmm... ok, danke. dann muss ich mir das mit dem iterator nochmals anschauen. 

also ich möchte einfach alle key / value paare aus einer hashmap lesen und diese dann in eine array list abfüllen.

gruss


----------



## semi (4. Apr 2005)

Die einfachste Variante ist die Key-Value Einträge direkt in ArrayList zu schreiben

```
HashMap map = ...
ArrayList list = new ArrayList(map.entrySet());
```
In "list" sind jetzt alle Einträge drin (Typ: Map.Entry)

Alternative

```
ArrayList list = new ArrayList(map.size());
for(Map.Entry e : map.entrySet())
{
  list.add(new EigenerTyp(e.getKey(), e.getValue()));
}
```


----------



## Search (4. Apr 2005)

danke für deine schnelle antwort...

noch eine frage zu deinem ersten beispiel... funktioniert dieses nur wenn key ein int ist und value irgend ein objekt? in meine fall sind key sowie auch auch die value strings. in eine array list können ja nur int / object paare eingelesen werden, oder? wie macht denn das die entrySet()-Methode?

gruss


----------



## Search (4. Apr 2005)

hallo

habs nun so gelöst:


```
public ArrayList getProperties()
	{
		ArrayList allProperties = new ArrayList();
		PropertyObject propertyObj = new PropertyObject();
		
		synchronized (mergedProperties)
		{
			Iterator it = mergedProperties.entrySet().iterator();
			
			while (it.hasNext())
			{
				propertyObj = null;
				
				Map.Entry entry = (Map.Entry)it.next();
				propertyObj.setPropertyKey((String) entry.getKey());
				propertyObj.setPropertyValue((String) entry.getValue());
				
				allProperties.add(propertyObj);
			}
			
			return allProperties;			
		}
	}
```

nun wird jedoch jedes property mit dem aktuellsten überschrieben. sind also alle properties aus der hashmap gelesen worden, steht überall das selber property in meiner liste. wie muss ich das machen damit jedesmal eine neues property objekt erstellt wird und nicht auf eine einziges referenziert wird?

mfg


----------



## semi (4. Apr 2005)

In ArrayList kannst Du alles hinzufügen, was irgendwie nach einem Objekt aussieht.
Es ist nichts anderes als eine dynamische Liste. HashMap ist ein assoziatives Array, 
bei dem jedes Element über einen Schlüssel angesprochen werden kann.
Es gibt von beiden paar verschiedene Implementierungen (z.B. LinkedList, Stack, TreeMap, LinkedMap etc.).

In HashMap werden die Schlüssel-Wert-Paare als Objekte vom Typ Map.Entry gespeichert.
Sie nehmen jeweils einen Schlüssel und einen Wert auf.
Mit map.entrySet() kriegst Du die Map.Entry Objekte in einem Set (wieder so 'ne Liste, die keine doppelten Einträge enthält)

In der Schleife werden aus dem Set die einzelnen Map.Entry Objekte ausgelesen. Bei jedem davon
kannst Du mit getKey() den Schlüssel und mit getValue() den Wert abfragen.

OK, bevor ein Buch draus wird... :wink:


----------



## semi (4. Apr 2005)

So ungefähr
	
	
	
	





```
public ArrayList getProperties() 
{ 
  ArrayList allProperties = new ArrayList(mergedProperties.size()); 
  synchronized (mergedProperties) 
  {
    Iterator it = mergedProperties.entrySet().iterator(); 
    while (it.hasNext()) 
    { 
      Map.Entry entry = (Map.Entry)it.next(); 
      
      PropertyObject propertyObj = new PropertyObject();       
      propertyObj.setPropertyKey((String) entry.getKey()); 
      propertyObj.setPropertyValue((String) entry.getValue()); 
      
      allProperties.add(propertyObj); 
    } 
  } 
  return allProperties;
}
```


----------



## search (5. Apr 2005)

vielen dank für deine hilfe, funktioniert nun alles wie gwünscht. 

habe nun nur noch ein problem. sollte die hashmap wenn möglich noch alphabetisch aufsteigend sortieren. alle keys wurden als strings eingefügt. gibts da schon ne bestehende sort-function oder muss man da selber nen algorythmus zu schreiben?

danke und gruss


----------

