MAP es una colección de pares de valor clave, también conocido como diccionarios o matrices asociativas, etc., y es una de las estructuras de datos más comunes. ¿Cómo ordenar un mapa por valor en Java? ¡Parece simple, pero no fácil!
Por ejemplo, en el mapa, la clave es el tipo de cadena, que representa una palabra, y el valor es tipo int, que representa el número de veces que aparece la palabra. Ahora queremos ordenar por el número de veces que aparece la palabra:
Map map = new TreeMap (); map.put ("me", 1000); map.put ("y", 4000); map.put ("usted", 3000); map.put ("alimentos", 10000); map.put ("hambriento", 5000); map.put ("más tarde", 6000); El resultado de la clasificación por valor debe ser:
Key Valueme 1000YOU 3000 y 4000 Hungry 5000Later 6000 Food 10000
En primer lugar, no podemos adoptar la estructura SortedMap, porque SortedMap es un mapa ordenado por claves, no un mapa ordenado por valor. Lo que queremos es un mapa ordenado por valor.
¿No podrías hacer esto con un mapa de clasificación?
No, porque el mapa está siendo ordenado por sus teclas.
Método 1:
El siguiente código Java:
import java.util.iterator; import java.util.set; import java.util.treeset; public class Main {public static void main (string [] args) {set set = new treeSet (); set.add (nuevo par ("me", "1000")); set.add (nuevo par ("y", "4000")); set.add (nuevo par ("you", "3000")); set.add (nuevo par ("comida", "10000")); set.add (nuevo par ("hambriento", "5000")); set.add (nuevo par ("más tarde", "6000")); set.add (nuevo par ("yo mismo", "1000")); for (iterator i = set.iterator (); i.hasnext ();) system.out.println (I.Next ()); }} par de clases implementa comparable {nombre de cadena final privada; Número de intivid final privado; PUBLE PAR (Nombre de cadena, int Number) {this.name = name; this.number = número; } Public Par (Nombre de cadena, número de cadena) lanza NumberFormateException {this.name = name; this.number = Integer.ParseInt (número); } public int Compareto (objeto o) {if (o instanciaf par) {int cmp = double.comPare (número, ((par) o) .number); if (cmp! = 0) {return cmp; } return name.compareto (((par) o) .name); } tirar nueva classcastException ("No se puede comparar el par con" + o.getClass (). getName ()); } public String toString () {Return Name + '' + Number; }} Código C ++ similar:
typedef par <string, int> par; int cmp (const par & x, const par & y) {return x.second> y.second;} map <string, int> m; vector <pair> vec; for (map <wstring, int> :: iterator curr = m.begin (); Curr. curr-> segundo));} sort (vec.begin (), vec.end (), cmp); La importancia esencial del método anterior es: encapsular el par de valor clave (MAP.Entry) en la estructura del mapa en una clase personalizada (struct), o usar la clase MAP.Entry directamente. Las clases personalizadas saben cómo ordenarse, es decir, ordenar por valor, implementar específicamente la interfaz comparable o construir un objeto comparador para sí mismos, y luego usar un conjunto ordenado sin usar la estructura de mapas (SastedSet, TreeSet es una implementación de SortedSet), que realiza el propósito de clasificar por valor en el mapa. Es decir, en lugar de usar map, map.entry se considera un objeto, de modo que el problema sea implementar un conjunto ordenado del objeto o clasificar el conjunto del objeto. Puede usar SortedSet, de modo que después de completar la inserción, se ordene naturalmente, o use una lista o una matriz, y luego lo ordene (Collections.sort () o Arrays.sort ()).
Encapsula la información en su propia clase. O implementar
Reglas comparables y de escritura para el pedido natural o escribir un
Comparador basado en sus criterios. Almacene la información en una ordenada
colección, o use el método Collections.sort ().
Método 2:
También puede usar el siguiente código para ordenar por valor:
public static map sortByValue (map map) {list list = new LinkedList (map.entryset ()); Colección.sort (list, new Comparator () {public int Compare (Object O1, Object O2) {return ((comparable) ((map.entry) (o1)). GetValue ()) .compareto (((map.entry) (o2)). GetValue ());}}); Resultado del mapa = new LinkedHashMap (); for (iterator it = list.iterator (); it.hasnext ();) {map.entry entry = (map.entry) it.next (); resultado.put (Entry.getKey (), Entry.getValue ()); } resultado de retorno; } public static map sortByValue (mapa mapa, reverso final de booleano) {list list = new LinkedList (map.entryset ()); Collections.sort (List, New Comparator () {public int Compare (Object O1, Object O2) {if (reverse) {return -((comparable) ((map.entry) (o1)). GetValue ()) .Compareto ((((map.entry) (o2)). GetValue ());} .Compareto ((((map.entry) (o2)). getValue ()); Resultado del mapa = new LinkedHashMap (); for (iterator it = list.iterator (); it.hasnext ();) {map.entry entry = (map.entry) it.next (); resultado.put (Entry.getKey (), Entry.getValue ()); } resultado de retorno; } Map map = new HashMap (); map.put ("A", 4); map.put ("b", 1); map.put ("C", 3); map.put ("d", 2); Map sorted = sortByValue (map); System.out.println (Sorted); // Salida: {b = 1, d = 2, c = 3, a = 4} o se puede hacer así: map map = new HashMap (); map.put ("A", 4); map.put ("b", 1); map.put ("C", 3); map.put ("d", 2); Set <map.entry <String, Integer >> treeSet = new TreeSet <map.entry <string, integer >> (new Comparator <map.Entry <String, Integer >> () {public int Compare (map.Entry <String, Integer> o1, map.Entry <String, Integer> O2) {integer d1 = o1.getvalue (); o2.getValue (); TreeSet.addall (map.entryset ()); System.out.println (TreeSet); // Salida: [a = 4, c = 3, d = 2, b = 1] Además, la implementación de mapa de clasificación por valor en Groovy es, por supuesto, la esencia es la misma, pero es muy simple:
Use el método de clasificación de mapa en Groovy (requiere Groovy 1.6).
defin resultado = map.sort () {a, b -> b.value.compareto (a.value)} como:
["A": 3, "B": 1, "C": 4, "D": 2] .sort {A, B -> A.Value - B.Value}
El resultado es: [B: 1, D: 2, A: 3, C: 4]
Similar en Python:
H = {"A": 2, "B": 1, "C": 3} i = H.Items () // i = [('A', 2), ('C', 3), ('B', 1)] I.Sort (Lambda (K1, V1), (K2, V2): CMP (V2, V1)) // I = [(((('C', 3), 2), 2), 2), 2). ('B', 1)]El artículo anterior habla brevemente sobre Java Map Sort por valor es todo el contenido que comparto con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.