Tipos de mapa
En Java, la función principal del mapa es almacenar pares de valor clave. Dado que el valor se obtiene en función de la clave, no se permite repetir la clave. Principalmente tiene las siguientes categorías:
Hashmap:
El mapa más utilizado almacena datos de acuerdo con el valor de hashcode de la clave, y puede obtener directamente su valor de acuerdo con la clave, con una velocidad de acceso muy rápida. Al atravesar, el orden de adquisición de datos es completamente aleatorio. Hashmap permite que solo un registro sea nulo; el valor de múltiples registros para ser nulo; Hashmap no admite la sincronización de subprocesos, es decir, múltiples hilos pueden escribir hashmap en cualquier momento; Puede conducir a una inconsistencia en los datos. Si se requiere sincronización, puede usar el método de colecciones sincronizados para hacer sincronizado hashmap o usar concurrenthashmap. Hashtable es similar a HASHMAP. Hereda de la clase de diccionario. La diferencia es que no permite que las teclas o valores grabados estén vacíos; Admite la sincronización de subprocesos, es decir, solo un hilo puede escribir hashtable en cualquier momento, por lo que también hace que la hashtable sea más lenta al escribir.
Linkedhashmap
Se guarda la orden de inserción de los registros. Al atravesar Linkedhashmap con iterador, los registros obtenidos primero deben insertarse primero. También puede usar parámetros durante la construcción y ordenarlos de acuerdo con la cantidad de aplicaciones. Será más lento que el hashmap cuando atraviese, pero hay una excepción. Cuando hashmap tiene una gran capacidad y son datos menos reales, puede ser más lento que Linkedhashmap, porque la velocidad transversal de Linkedhashmap solo está relacionada con los datos reales y no tiene nada que ver con la capacidad, mientras que la velocidad de recorrido de Hashmap está relacionada con su capacidad.
Treemap
Implementación de la interfaz SortMap, los registros que guarda se pueden ordenar de acuerdo con la clave. Por defecto, se clasifica en orden ascendente de valores clave, o también puede especificar un comparador ordenado. Cuando está atravesado con iterador, los registros obtenidos están ordenados.
Clasificación de llave
Desde la introducción anterior a los tipos de mapas, podemos ver que Treemap tiene su propia función de clasificación clave. Solo necesita implementar una interfaz de comparación al mismo tiempo al crearla. El ejemplo es el siguiente:
privado static void sort_by_key () {map <integer, integer> treeMap = new TreeMap <> (nuevo comparador <integer> () {@Override public int Compare (Integer O1, Integer O2) {return o2-o1; // orden inverso. Permítanme explicar aquí que si se devuelve un valor negativo, o1 saldrá primero, o2}}); // llenar los datos para (int i = 0; i <100; i ++) {int key = (int) (10000*math.random ()); int value = (int) (10000*Math.random ()); Treemap.put (clave, valor); } outMap (treemap); } public static void outMap (map <integer, integer> map) {for (Integer Integer: map.KeySet ()) {System.out.println ("Key ="+Integer+"Value ="+Map.get (Integer)); }}/* El resultado es el siguiente: clave = 9977 valor = 80key = 9684 valor = 7108key = 9422 valor = 1706key = 9264 valor = 1210key = 9248 valor = 4758key = 9024 valor = 7048key = 8892 valor = 3124key = 8879 Valor = 6414key = 8814 Valor = 8171Key = 8728 Valor = 1538Key = 8513 Valor = 4956Key = 8462 Valor = 5617Key = 8355 Valor = 8912*/Como se puede ver de lo anterior, no es difícil ordenar con las teclas, pero es más problemático colocar el tipo, por lo que debe girar el mapa.
Ordenar por valor
Dado que MAP no tiene esta función en Java, necesitamos implementarla nosotros mismos. La idea es la siguiente:
La lista en Java puede usar la interfaz Compare.
El mapa es en realidad una entrada <> colección. Por lo tanto, el uso de la lista <Entry <>> puede implementar la clasificación e insertar los elementos ordenados en LinkedMap.
La implementación del código es la siguiente:
Mapa estático privado <Integer, Integer> sortMap (MAP <Integer, Integer> LinkedMap) {list <map.entry <integer, integer >> cache = new ArrayList <> (linkedMap.Entryset ()); // Reescribe las funciones de comparación colección.sort (caché, nuevo comparador <map.entry <integer, integer >> () {@Override public int Compare (Entry <Integer, Integer> O1, Entry <Integer, Integer> o2) {// si el valor de retorno es menos de 0, luego O1 es antes de O2 O2.getValue ()---O1.get ();); }); MAP <Integer, Integer> resultMap = new LinkedHashMap <> (); // Inserte el resultado en LinkedMap y return para (int i = 0; i <cache.size (); i ++) {resultMap.put (cache.get (i) .getKey (), cache.get (i) .getValue ()); } return denteMap; }/*Resultado: 7965 99661067 99631720 98333257 97383934 9578777 93481924 93153472 92703649 91145892 9078*/De esta manera, se pueden lograr clasificación por valor y clasificación por clave.