# Hashmap sortieren



## krackmoe (28. Dez 2010)

Ich hab eine Hashmap:
Map<String, FileServerStatus> fileserver = new HashMap<String, FileServerStatus>();

FileServerStatus hat eine Methode .getUsage()

Jetzt möchte ich die 3 FileServerStatus rausbekommen mit der geringsten Usage.

Was für Möglichkeiten hab ich bitte, um hier zu einer Lösung zu kommen? Ich weiß nicht wie ich das angehen soll.
Wie sortier ich das, bzw speicher mir das in eine neue Hashmap oder in eine List oder wie?


----------



## MQue (28. Dez 2010)

FileServerStatus muss das Interface Comparable implementiert haben und in der Methode compare kannst du dann defineiren, wie die FileServerStatus- Objekte miteinander verglichen werden.

Comparable (Java 2 Platform SE v1.4.2)

Sort an HashMap - Real's Java How-to


----------



## krackmoe (28. Dez 2010)

Danke dir, werd mir das ansehen.


----------



## Landei (28. Dez 2010)

Wenn du nach Schlüsseln sortieren wölltest, würde eine TreeMap statt der HashMap weiterhelfen, aber du willst ja die Werte sortieren. Wenn ganz sicher keine doppelten FileServerStatus-Einträge vorkommen Du könnstest ungefähr sowas schreiben:

```
Set<FileServerStatus> set = new TreeSet<FileServerStatus>(new FileServerStatusByUsageComparator());
set.addAll(fileserver.values());
```
(wobei du einen geeigneten Comparator natürlich noch schrieben musst)

Bei einer großen Map kann es aber wesentlich schneller sein, einfach die fileserver.values() in einer Schleife nach den drei kleinsten Werten durchzusuchen.


----------



## krackmoe (28. Dez 2010)

Es kann leider vorkommen, das einige Fileserver die gleiche usage haben...


----------



## krackmoe (28. Dez 2010)

Ähm.. muss meine HashMap eigentlich zu ner List umgewandelt werden, wenn ich bei FileServerStatus Comparable implementiere, damit ich sie sortieren kann?


----------



## Marco13 (28. Dez 2010)

Eine HashMap ist nicht sortiert, da gibt's auch nichts mit Comparatoren oder Comparable. Am einfachsten wäre es, die Values in eine List zu packen, und DIE dann (mit einem eigenen Comparator) zu sortieren. Insbesondere wenn es Elemente gibt, die "gleich" sind (den gleichen sortierrelevanten Wert haben) ist eine Map oder Set einfach die falsche Datenstruktur...


----------

