Heim  >  Artikel  >  Java  >  Ausführliche Erklärung zum Sortieren von Karten in Java (Verwendung der Kartensammlung)

Ausführliche Erklärung zum Sortieren von Karten in Java (Verwendung der Kartensammlung)

高洛峰
高洛峰Original
2017-01-17 11:52:001479Durchsuche

Wenn Sie heute Statistiken erstellen, müssen Sie die Bereiche sortieren

1. Kurze Einführung in die Karte

Bevor wir die Kartensortierung erklären, wollen wir uns zunächst ein wenig mit der Karte befassen. Map ist eine Sammlungsschnittstelle von Schlüssel-Wert-Paaren. Zu ihren Implementierungsklassen gehören hauptsächlich: HashMap, TreeMap, Hashtable und LinkedHashMap usw. Die Unterschiede zwischen den vier sind wie folgt (kurze Einführung):

HashMap: Unsere am häufigsten verwendete Karte speichert Daten basierend auf dem HashCode-Wert des Schlüssels. Sein Wert kann direkt basierend auf dem Schlüssel abgerufen werden. und es hat eine schnelle Zugriffsgeschwindigkeit. HashMap lässt nur zu, dass der Schlüsselwert eines Datensatzes Null ist (mehrere Datensätze werden überschrieben); der Wert mehrerer Datensätze kann Null sein. Asynchron.

TreeMap: Die gespeicherten Datensätze können standardmäßig in aufsteigender Reihenfolge sortiert werden. Wenn Sie einen Iterator zum Durchlaufen der TreeMap verwenden, werden die erhaltenen Datensätze sortiert. TreeMap lässt nicht zu, dass der Schlüsselwert null ist. Asynchron.

Hashtable: Ähnlich wie HashMap, außer dass die Schlüssel- und Wertwerte nicht null sein dürfen; es unterstützt die Thread-Synchronisation, das heißt, es kann immer nur ein Thread in die Hashtable schreiben, was auch der Fall ist Das führt dazu, dass Hashtale beim Schreiben langsamer wird.

LinkedHashMap: Speichert die Einfügereihenfolge von Datensätzen. Wenn Sie LinkedHashMap mit Iterator durchlaufen, muss der zuerst erhaltene Datensatz zuerst eingefügt werden. Dies ist beim Durchlaufen langsamer. Sowohl Schlüssel als auch Wert dürfen leer und asynchron sein.

2. Kartensortierung

TreeMap

TreeMap ist standardmäßig in aufsteigender Reihenfolge, wenn wir die Sortiermethode ändern müssen ein Komparator: Komparator.

Comparator ist eine Komparatorschnittstelle, die Sammlungsobjekte oder Arrays sortieren kann. Durch die Implementierung der öffentlichen Vergleichsmethode (T o1, To2) dieser Schnittstelle kann eine Sortierung erreicht werden kleiner als, gleich oder größer als o2 gibt eine negative Ganzzahl, 0 bzw. eine positive Ganzzahl zurück. Wie folgt:

public class TreeMapTest {
    public static void main(String[] args) {
        Map<String, String> map = new TreeMap<String, String>(
                new Comparator<String>() {
                    public int compare(String obj1, String obj2) {
                        // 降序排序
                        return obj2.compareTo(obj1);
                    }
                });
        map.put("c", "ccccc");
        map.put("a", "aaaaa");
        map.put("b", "bbbbb");
        map.put("d", "ddddd");

        Set<String> keySet = map.keySet();
        Iterator<String> iter = keySet.iterator();
        while (iter.hasNext()) {
            String key = iter.next();
            System.out.println(key + ":" + map.get(key));
        }
    }
}

Die Laufergebnisse sind wie folgt:

d:ddddd
c:ccccc
b:bbbbb
a:aaaaa

Das obige Beispiel Es wird nach dem Schlüsselwert von TreeMap sortiert, aber manchmal müssen wir nach dem Wert von TreeMap sortieren. Um Werte zu sortieren, müssen wir die Methode sort(List8742468051c85b06f0a0af9e3e506b5c list, Comparator117c5a0bdb71ea9a9d0c2b99b03abe3e c) von Collections verwenden, die die angegebene Liste entsprechend der vom angegebenen Komparator generierten Reihenfolge sortiert. Voraussetzung ist jedoch, dass alle Elemente mit dem bereitgestellten Komparator verglichen werden können. Wie folgt:

public class TreeMapTest {
    public static void main(String[] args) {
        Map<String, String> map = new TreeMap<String, String>();
        map.put("d", "ddddd");
        map.put("b", "bbbbb");
        map.put("a", "aaaaa");
        map.put("c", "ccccc");

        //这里将map.entrySet()转换成list
        List<Map.Entry<String,String>> list = new ArrayList<Map.Entry<String,String>>(map.entrySet());
        //然后通过比较器来实现排序
        Collections.sort(list,new Comparator<Map.Entry<String,String>>() {
            //升序排序
            public int compare(Entry<String, String> o1,
                    Entry<String, String> o2) {
                return o1.getValue().compareTo(o2.getValue());
            }

        });

        for(Map.Entry<String,String> mapping:list){ 
               System.out.println(mapping.getKey()+":"+mapping.getValue()); 
          } 
    }
}

Laufergebnis

a:aaaaa
b:bbbbb
c:ccccc
d:ddddd

HashMap

Wir haben alle HashMap-Werte, die nicht in Ordnung sind. Sie werden gemäß dem HashCode des Schlüssels implementiert. Wie implementieren wir die Sortierung für diese ungeordnete HashMap? Bezogen auf die Wertesortierung von TreeMap können wir auch die Sortierung von HashMap implementieren.

public class HashMapTest {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<String, String>();
        map.put("c", "ccccc");
        map.put("a", "aaaaa");
        map.put("b", "bbbbb");
        map.put("d", "ddddd");

        List<Map.Entry<String,String>> list = new ArrayList<Map.Entry<String,String>>(map.entrySet());
        Collections.sort(list,new Comparator<Map.Entry<String,String>>() {
            //升序排序
            public int compare(Entry<String, String> o1,
                    Entry<String, String> o2) {
                return o1.getValue().compareTo(o2.getValue());
            }

        });

        for(Map.Entry<String,String> mapping:list){ 
               System.out.println(mapping.getKey()+":"+mapping.getValue()); 
          } 
     }
}

Laufendes Ergebnis

a:aaaaa
b:bbbbb
c:ccccc
d:ddddd

Mehr Java, wie man eine Karte erstellt Ausführliche Erläuterung der Sortierung (Verwendung von Kartensammlungen). Bitte beachten Sie die PHP-Chinese-Website für verwandte Artikel!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn