colecciones Mapa de tipo Java
comparador interfaz implementada, comparar método de reescritura, Organización personalizada completa
int comparar (o1 objeto, o2 Object ) devuelve un tipo base número entero
en el orden ascendente, entonces el menos de o2 o1, devuelve -1 (negativo), es igual a 0,01 de más de 02 retorno 1 retorno (positivo)
si de acuerdo con en orden descendente, es menos de o1 o2, devoluciones 1 (un número positivo), es igual a 0,01 de mayor que 02 devuelve -1 (negativos)
Uso ejemplo:
java.util.ArrayList importación; java.util.Collections de importación; java.util.Comparator importación; java.util.HashMap importación; java.util.List importación; java.util.Map importación; java.util.Map.Entry importación; public class MapSort { void main (String [] args) {public static sortMap (); //测试Mapa排序 } public static Map <String, doble> sortMap () { Map <String, doble> mapa = new HashMap <String, doble> (); map.put ( "100M", (doble) 100); map.put ( "10M", (doble) 10); map.put ( "1000G", (doble) 1.000.000); map.put ( "10G", (doble) 10 000); map.put ( "100T", (doble) 100 000 000); map.put ( "10T", map.put ( "1T", (doble) 1.000.000); Lista <Map.Entry <String, Double >> list = new ArrayList <Map.Entry <String, Double >> (map.entrySet ()); System.out.println ( "排序前:" + lista); Collections.sort (lista, nueva Comparador <Map.Entry <String, Double >> () { //从大到小 @Override public int comparar (Entrada <String, doble> o1, la entrada <String, doble> O2) { si (o1.getValue ()> o2.getValue ()) { return -1; } else if (. o1.getValue () es igual a (o2.getValue ())) { . cadena str1 = o1.getKey () subcadena ( .. o1.getKey () longitud () - 1, o1.getKey () longitud ()); . cadena str2 = o2.getKey (.) subcadena (o2.getKey () longitud () - 1, o2.getKey ( ).longitud()); // Debido a que la definición del tipo de envase doble, al comparar la igualdad de necesidad es igual a, se utiliza la comparación de direcciones == objeto SI (str1.equals (str2)) { return 0; // el mismo valor, comparando es la unidad, el orden descendente unidad T> G> M } else if ((str1.equals ( "T") && str2.equals ( "G")) || (str1.equals ( "T") && str2.equals ( "M")) || (str1.equals ( "G") && str2.equals ( "M"))) { return -1; } else { return 1; } } Else { return 1; } } }); System.out.println ( "排序后(从大到小):" + lista);
Mapa de retorno; } }
Los resultados:
Antes de ordenar: [1000G = 1000000.0, 1T = 1000000.0, 100T = 1.0E8, 10T = 1.0E7, 10G = 10000.0, 100M = 100,0, 10M = 10,0]
ordenadas (descendente): [100T = 1.0E8, 10T = 1.0E7, 1T = 1000000.0, 1000G = 1000000.0, 10G = 10000.0, 100M = 100,0, 10M = 10,0]