MAP ist eine Sammlung von Schlüsselwertpaaren, auch als Wörterbücher oder assoziative Arrays usw. bekannt, und ist eine der häufigsten Datenstrukturen. Wie sortiere ich eine Karte nach Wert in Java? Es scheint einfach, aber nicht einfach!
In der Karte ist beispielsweise der Schlüssel String -Typ, der ein Wort darstellt, und der Wert ist int -Typ, der die Anzahl der angezeigten Anzahl darstellt. Jetzt wollen wir nach der Häufigkeit des Wortes sortieren:
Map map = new treemap (); map.put ("me", 1000); map.put ("und", 4000); map.put ("du", 3000); map.put ("food", 10000); map.put ("hungry", 5000); map.put ("später", 6000); Das Ergebnis der Sortierung nach Wert sollte sein:
Key Valueme 1000you 3000and 4000 Hungry 5000Later 6000Food 10000
Zunächst können wir die SortEdMap -Struktur nicht annehmen, da SortEdMap eine Karte ist, die nach Schlüssel sortiert ist, und keine Karte, die nach Wert sortiert ist. Was wir wollen, ist eine Karte, die nach Wert sortiert ist.
Könnten Sie das nicht mit einer sortierten Map tun?
Nein, weil die Karte nach ihren Schlüssel sortiert wird.
Methode 1:
Der folgende Java -Code:
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 (neues Paar ("me", "1000")); set.add (neues Paar ("und", "4000"); set.add (neues Paar ("du", "3000")); set.add (neues Paar ("Food", "10000")); set.add (neues Paar ("Hungry", "5000"); set.add (neues Paar ("später", "6000"); set.add (neues Paar ("mich", "1000")); für (iterator i = set.iterator (); hasnext ();) system.out.println (i.Next ()); }} Klassenpaar implementiert vergleichbar {private endgültige Zeichenfolgenname; private endgültige intnummer; public pair (String -Name, int Nummer) {this.name = name; this.number = number; } public pair (String -Name, String -Nummer) löst NumberFormatexception aus {this.name = name; this.number = Integer.ParseInt (Nummer); } public int vergleicheto (Objekt o) {if (o Instanzpaar) {int cmp = double.comPare (Nummer, (Paar) o) .number); if (cmp! = 0) {return cmp; } return name.comPareto (((Paar) O) .Name); } throune New ClassCastException ("Ich kann Paar nicht mit" + O.GetClass () vergleichen. getName ()); } public String toString () {return name + '' + number; }} Ähnlicher C ++ - Code:
Typedef-Paar <String, int> pair; int cmp (const pair & x, const pair & y) {return x.second> y.second;} map <String, int> m; vector <paars> vec; für (map <wstring, int> :: iterator curr = m.begin (); Curr-> Second));} sort (vec.begin (), vec.end (), cmp); Die wesentliche Bedeutung der obigen Methode lautet: Einkapseln Sie das Schlüsselwertpaar (MAP.Entry) in der Kartenstruktur in eine benutzerdefinierte Klasse (Struktur) oder verwenden Sie die MAP.Entry-Klasse direkt. Benutzerdefinierte Klassen wissen, wie man sich selbst sortiert, dh nach Wert sortiert, spezifisch die vergleichbare Schnittstelle implementiert oder ein Vergleichsobjekt für sich selbst erstellt und dann einen geordneten Satz verwendet, ohne die Kartenstruktur zu verwenden (sortiert, TreeSet ist eine Implementierung von Sorten), die den Zweck des Sortierens nach Wert in der Karte realisiert. Das heißt, anstatt MAP zu verwenden, wird Map.Entry als Objekt angesehen, so dass das Problem eine geordnete Menge des Objekts implementiert oder den Satz des Objekts sortiert. Sie können SortEDSet verwenden, damit nach Abschluss der Einführung natürlich bestellt wird oder eine Liste oder ein Array verwendet wird und sie dann sortiert (sorts.sort () oder arrays.sort ()).
Kapitulieren Sie die Informationen in einer eigenen Klasse. Entweder implementieren
Vergleichbare und schreiben Regeln für die natürliche Bestellung oder schreiben a
Vergleicher basierend auf Ihren Kriterien. Speichern Sie die Informationen in einem sortierten
Sammlung oder Verwenden Sie die Methode collects.sort ().
Methode 2:
Sie können auch den folgenden Code verwenden, um nach Wert zu sortieren:
public static map sortByValue (MAP MAP) {listlist = new LinkedList (map.entrySet ()); Collectionss.Sort (Liste, neuer Vergleicher () {public int compare (Objekt O1, Objekt O2) {return ((vergleichbar) ((map.enterry) (o1)). GetValue ()) .Compareto ((map.entry) (O2)). GetValue ());}}); MAP -Ergebnis = neu linkedHasMap (); für (iterator it = list.iterator (); it.hasnext ();) {map.Entry -Eintrag = (map.Entry) it.Next (); result.put (Entry.getKey (), Eintrag.getValue ()); } Rückgabeergebnis; } public static map sortByValue (MAP MAP, endgültig boolean reverse) {listlist = new LinkedList (map.entrySet ()); Collectionss.Sort (Liste, neuer Vergleicher () {public int Compare (Objekt O1, Objekt O2) {if (reverse) {return -((vergleichbar) ((map.Entry) (O1)). GetValue ()) .Compareto ((map.Entier) (O2). compareto ((map.Entry) (O2)). GetValue ()); MAP -Ergebnis = neu linkedHasMap (); für (iterator it = list.iterator (); it.hasnext ();) {map.Entry -Eintrag = (map.Entry) it.Next (); result.put (Entry.getKey (), Eintrag.getValue ()); } Rückgabeergebnis; } Map map = new HashMap (); map.put ("a", 4); map.put ("b", 1); map.put ("c", 3); map.put ("D", 2); MAP sortiert = SortByValue (MAP); System.out.println (sortiert); // Ausgabe: {b = 1, d = 2, c = 3, a = 4} oder es kann so durchgeführt werden: 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 >> (neuer Vergleicher <map.Entry <String, Integer >> () {public int compare (map.Entry <String, Integer> O1, MAP.Entry <String, Integer> O2) {IntEger D1 = O1.GEGEGAGE (); O2.GetValue (); treeset.addall (map.entryset ()); System.out.println (Treeset); // Ausgabe: [a = 4, c = 3, d = 2, b = 1] Darüber hinaus ist die Implementierung der Sortierkarte nach Wert in Groovy natürlich die Essenz, aber sehr einfach:
Verwenden Sie die Sortiermethode der Karte in Groovy (erfordert Groovy 1.6).
Def result = map.sort () {a, b -> B.Value.comPareto (A.Value)}} wie:
["A": 3, "B": 1, "C": 4, "D": 2] .Sort {a, b -> a.value - B. value}
Das Ergebnis ist: [B: 1, D: 2, A: 3, C: 4]
Ähnlich in 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 = [= [(), (' ('B', 1)]Im obigen Artikel handelt es sich kurz um den Wert von Java Map Sort. Ich hoffe, es kann Ihnen eine Referenz geben und ich hoffe, Sie können Wulin.com mehr unterstützen.