# Map.entrySet vs Map.keySet



## bygones (14. Sep 2009)

huhu,

wer benutzt was ?
gibt es signifikante performance unterschiede ?
ist eins mehr zu empfehlen ?

also

```
Map<String, String> map = // woher auch immer
for(String key : map.keySet()) {
   String value = map.get(key);
}
```

gegen

```
Map<String, String> map = // woher auch immer
for(Map.Entry<String,String> entry : map.entrySet()) {
   String value = entry.getValue();
}
```

interessiert mich, da FindBugs es vorschlaegt, man aber im Netz fast nur dazu FindBugs informationen findet....


----------



## Atze (14. Sep 2009)

finde entryset passender, falls man nicht nur durch das set will zwecks einer sortierung. wenn ich eh beide werte haben will, warum dann erst alle keys holen, und damit nochmal die werte? kann doch gleich alles rausholen.

für ein komplettes auslesen der map würde ich auf jeden fall entryset wählen, tut sich performancetechnisch wohl rei garnix, als wenn ich alle keys hole und dann nochmal mit jedem key den wert. ist vielleicht sogar schneller.

wenn ich allerdings nur sdie keys brauche, diese erst sortieren oder reduzieren will, und dann nur einen oder ein paar werte brauche, dann natürlich keyset


----------



## Marco13 (14. Sep 2009)

EDIT: Siehe unten!

Was empfiehlt FindBugs denn? Ich würde sagen: Wenn man die Keys braucht, nimmt man KeySet, und wenn man die Entries braucht, nimmt man EntrySet  Sowas wie

```
for (Key key : map.keySet())
{
    Value value = map.get(value);
    soSomethingWith(key, value);
}
```
wäre natürlich sinnlos, aber ... alles andere (d.h. die Performance) hängt IMHO von der konkreten Implementierung der Map ab...


EDIT: Ah, da wurde der erste Beitrag noch editiert - aber meine Antwort passt wohl immernoch


----------



## bygones (14. Sep 2009)

es geht hier wirklich um das komplette auslesen einer Map - d.h. man braucht im Grunde die Values.

die Map implementierung ist unbekannt


----------



## Atze (14. Sep 2009)

entryset


----------



## SlaterB (14. Sep 2009)

KeySet ist schöner, EntrySet nur, wenn es sich nicht vermeiden läßt, etwa für Sortierung

public static <T extends Comparable<T>, U>List<Entry<T, U>> getSortedEntryList(Map<T, U> _map)
    {
..
}


----------



## maki (14. Sep 2009)

bygones hat gesagt.:


> es geht hier wirklich um das komplette auslesen einer Map - d.h. man braucht im Grunde die Values.
> 
> die Map implementierung ist unbekannt


In diesem Falle ist eindeutig  das EntrySet zu bevorzugen, Findbugs meckert das KeySet in solchen Fällen übrigens auch an 

nachtrag: Ooops, da smit FindBugs hast du ja auch schon gemerkt.


----------

