Tengo el siguiente hashmap en java:
{B046 = 0.0, A061 = 3.0, A071 = 0.0, B085 = 0.0, B075 = 3.0, B076 = 9.0, B086 = 3.0, B095 = 0.0, B096 = 0.0, A052 = 0.0, B066 = 0.0, B056 = 9.0, B065 = 0.0, B055 = 9.0}
¿Cómo debo ordenar el mapa de hash de modo que se tengan en cuenta el alfabeto seguido de las cifras numéricas?
El hashmap resultante debería verse así:
{A052 = 0.0, A061 = 3.0, A071 = 0.0, B046 = 0.0, B055 = 9.0, B056 = 9.0, B065 = 0.0, B066 = 0.0, B075 = 3.0, B076 = 9.0, B085 = 0.0, B086 = 3.0, B095 = 0.0, B096 = 0.0}
¡Agradezco la ayuda!
Respuestas:
Usar ordenado
TreeMap
:Map<String, Float> map = new TreeMap<>(yourMap);
Colocará automáticamente las entradas ordenadas por claves. Creo que el
String
orden natural estará bien en tu caso.Tenga en cuenta que
HashMap
debido a las optimizaciones de búsqueda no conserva el orden.fuente
Utilice un TreeMap con un comparador personalizado.
class MyComparator implements Comparator<String> { public int compare(String o1,String o2) { // Your logic for comparing the key strings } } TreeMap<String, Float> tm = new TreeMap<String , Float>(new MyComparator());
A medida que agregue nuevos elementos, se ordenarán automáticamente.
En su caso, es posible que ni siquiera sea necesario implementar un comparador porque el ordenamiento de cadenas puede ser suficiente. Pero si desea implementar casos especiales, como las letras alfa en minúsculas que aparecen antes de las mayúsculas, o tratar los números de cierta manera, use el comparador.
fuente
TreeMap
es su mejor apuesta para este tipo de clasificación (Natural).TreeMap
naturalmente ordena según las claves.HashMap
no conserva el orden de inserción ni ordena el mapa.LinkedHashMap
mantiene el orden de inserción pero no ordena el mapa automáticamente. SoloTreeMap
en laMap
interfaz se ordena el mapa de acuerdo con el orden natural (los números primero, el alfabeto en mayúsculas en segundo lugar, el alfabeto en minúsculas al final).fuente
Use un TreeMap , aunque tener un mapa "con ese aspecto" es un poco nebuloso; también puede ordenar las claves según sus criterios e iterar sobre el mapa, recuperando cada objeto.
fuente
Solo usa un
TreeMap
. Implementa laSortedMap
interfaz y, por lo tanto, ordena automáticamente las claves que contiene. Sus claves se pueden ordenar alfabéticamente para obtener el resultado deseado, por lo que ni siquiera necesita proporcionar un comparador.Los HashMaps nunca se ordenan. Lo único que podría hacer con un HashMap es obtener todas las claves y almacenarlas en un conjunto ordenado o en una Lista y ordenar la Lista.
fuente
Usando el TreeMap puede ordenar el mapa.
Map<String, String> map = new HashMap<String, String>(); Map<String, String> treeMap = new TreeMap<String, String>(map); //show hashmap after the sort for (String str : treeMap.keySet()) { System.out.println(str); }
fuente
Puede usar
TreeMap
que almacenará valores en forma ordenada.Map <String, String> map = new TreeMap <String, String>();
fuente
Utilice TreeMap (constructor):
Map<String, Float> sortedMap = new TreeMap<>(yourMap);
Utilice TreeMap (método PutAll):
Map<String, Float> sortedMap = new TreeMap<>(); sortedMap.putAll(yourMap);
Implementación de la interfaz Map:
fuente
TreeMap se clasificará automáticamente en orden ascendente. Si desea ordenar en orden descendente, use el siguiente código:
Copie el siguiente código dentro de su clase y fuera del método de ejecución principal:
static class DescOrder implements Comparator<String> { @Override public int compare(String o1, String o2) { return o2.compareTo(o1); } }
Entonces en tu lógica:
TreeMap<String, String> map = new TreeMap<String, String>(new DescOrder()); map.put("A", "test1"); map.put("C", "test3"); map.put("E", "test5"); map.put("B", "test2"); map.put("D", "test4");
fuente