Puede usar un NavigableMap
(TreeMap
es un NavigableMap
), que es un SortedMap
con capacidades de navegación.
NavigableMap#descendingMap()
devuelve una vista de orden inverso (no una copia) de las asignaciones que figuran en este mapa.
Ejemplo:
NavigableMap<String, String> items = new TreeMap<String, String>();
items.put("B", "2");
items.put("A", "1");
items.put("C", "3");
for (Map.Entry<String, String> e : items.entrySet()) {
System.out.println(e);
}
// gives
// A=1
// B=2
// C=3
for (Map.Entry<String, String> e : items.descendingMap().entrySet()) {
System.out.println(e);
}
// gives
// C=3
// B=2
// A=1
Nota: Esta respuesta es válida si se preocupan por el ordenamiento natural de las claves en su Map
. Si le importa el orden de inserción o el orden de acceso, eche un vistazo al LinkedHashMap
.
Nota 2: En su pregunta, utilizó un HashMap
. Tenga en cuenta que HashMap
no garantiza ningún pedido para sus elementos. En realidad, ni siquiera garantiza que el orden se mantendrá constante a lo largo del tiempo. Consulte el primer párrafo de HashMap
's javadoc para obtener más referencias.
Los términos Último y Primero parecen denotar tiempo. La mayoría de las respuestas que veo asumen que el Último y el Primer son semánticos (por ejemplo, C es más grande que A y, por lo tanto, Última). OrderedMaps no lo ayudará si necesita ordenar el tiempo de inserción y no tiene la marca de tiempo de inserción en la clave. – extraneon
'HashMap' no garantiza ningún orden para sus elementos. En particular, no garantiza que el orden se mantenga constante a lo largo del tiempo. Por lo tanto, 'HashMap' no es lo que quieres si tienes que mantener cualquier tipo de orden. – barjak