HashMaps speichern die sortierte Reihenfolge der Schlüssel nicht definitionsgemäß. Sie können dies jedoch erreichen, indem Sie ein Array der Schlüssel über: Object[] keys = map.keySet().toArray();
erhalten. Dann sortieren Sie die Liste mit Arrays: Arrays.sort(keys);
und durchlaufen schließlich jeden Schlüssel und rufen den Wert von der HashMap ab.
for(Object key : keys) {
System.out.println(map.get(key));
}
Der Sortierschritt führt dazu, dass der Algorithmus in O (n lg n) statt in O (n) läuft, was unter Verwendung einer Sortierdatenstruktur möglich wäre.
Dies wird die Liste lexikographisch sortieren. Da Ihre Frage das gängige US-Datumsformat verwendet, wird die Liste nach Tag, Monat und schließlich Jahr sortiert. Dies ist wahrscheinlich nicht korrekt. Sie können entweder ein Jahr, einen Monat, ein Tag-String-Format des Datums oder ein passenderes Schlüsselobjekt verwenden. Joda-Time's DateTime und DateTimeComparator wären sehr nützlich. Verwenden Sie einfach DateTime als Schlüssel und eine DateTimeComparator-Instanz, wenn Sie Arrays.sort(keys, comparator);
aufrufen.
Keys einer Map werden in einem Set
gespeichert, das nicht sortiert werden kann. Sie können dies tun, indem Sie die Schlüssel des Kartensatzes in List
einfügen und stattdessen sortieren.
z.B.
%Vor% Hier habe ich die Date
Klasse verwendet ist viel besser zum Speichern von Daten als einfache Strings.
HashMap
stellt keine Reihenfolge zur Verfügung, wenn Sie darüber iterieren (oder sogar garantieren, dass die Reihenfolge gleich bleibt, wenn Sie mehrfach durchlaufen). Wenn Sie eine natürliche Reihenfolge über die Schlüssel wünschen, versuchen Sie TreeMap
. Beachten Sie, dass Ihre Strings dd/mm/yy
formatiert sind. Wenn sie also von TreeMap
bestellt werden, wird sie zuerst nach Tag und nicht nach Jahr aufsteigend angezeigt, was wahrscheinlich nicht das ist, was Sie möchten. Sie sollten entweder Zeichenfolgen wie yy/mm/dd
verwenden, zur Verwendung einer Klasse wechseln, die diese Informationen besser kapselt als Date
, oder Ihre eigene Comparator
definieren, wenn Sie die TreeMap
erstellen, die Ihre dd/mm/yy
Zeichenfolgen zu sortieren weiß die richtige Reihenfolge
HashMap definiert nicht die Reihenfolge der Iteration über die Elemente. Wenn Sie Elemente nach Schlüsseln sortiert abrufen möchten, verwenden Sie stattdessen die TreeMap . Da Sie die Zeichenfolgen jedoch im Format "TT / MM / JJJJ" speichern, ist die Reihenfolge wahrscheinlich nicht die gewünschte Reihenfolge. Verwenden Sie daher entweder das Datum als Schlüssel oder mindestens die Zeichenfolge "JJJJ-MM-TT" ".
Ich würde vorschlagen, dass Sie den HashMap-Schlüssel von String zu Datum ändern, z. %Code%. Das sollte den Trick machen.
oops - mach das zu einem HashMap<Date, List<AppPrjMilestone>>