Heim  >  Artikel  >  Java  >  Implementierung der Kartensortierung in Java

Implementierung der Kartensortierung in Java

王林
王林nach vorne
2019-11-29 13:34:072574Durchsuche

Implementierung der Kartensortierung in Java

map ist eine Sammlungsschnittstelle von Schlüssel-Wert-Paaren. Zu ihren Implementierungsklassen gehören hauptsächlich: HashMap<span style="font-family:Microsoft Yahei, Hiragino Sans GB, Helvetica, Helvetica Neue, 微软雅黑, Tahoma, Arial, sans-serif">、</span>TreeMap<span style="font-family:Microsoft Yahei, Hiragino Sans GB, Helvetica, Helvetica Neue, 微软雅黑, Tahoma, Arial, sans-serif">、</span>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 erhalten werden Gleichzeitig verfügt es über 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 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 bei HashMap besteht der Unterschied darin, dass weder Schlüssel noch Wert null sein dürfen; es unterstützt die Thread-Synchronisierung, d. h. es kann jeweils nur ein Thread in die Hashtable schreiben, was ebenfalls der Fall ist 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.

Teilen von Online-Lernkursen: Java-Kurs

Kartensortierung

TreeMap

TreeMap ist standardmäßig in aufsteigender Reihenfolge. Wenn wir die Sortiermethode ändern müssen, müssen wir einen Komparator verwenden: Comparator.

Comparator ist eine Komparatorschnittstelle, die Sammlungsobjekte oder Arrays sortieren kann. Durch die Implementierung der öffentlichen Vergleichsmethode (T o1, To2) kann eine Sortierung erreicht werden. o1, 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 laufenden Ergebnisse lauten wie folgt:

Implementierung der Kartensortierung in Java

Das obige Beispiel dient der Sortierung basierend auf dem Schlüsselwert von TreeMap, aber manchmal brauchen wir es um basierend auf dem Wert von TreeMap zu sortieren. Um Werte zu sortieren, müssen wir die Methode sort(List list, Comparator super T> c) von Collections verwenden, die die angegebene Liste entsprechend der vom angegebenen Komparator generierten Reihenfolge sortiert.

Es gibt jedoch eine Voraussetzung, das heißt, alle Elemente müssen gemäß 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()); 
          } 
    }
}

Betriebsergebnisse

Implementierung der Kartensortierung in Java

HashMap

Wir sind alle HashMap-Werte und das gibt es Keine Reihenfolge. Es wird 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()); 
          } 
     }
}

Laufergebnisse:

Implementierung der Kartensortierung in Java

Weitere verwandte Artikel und Tutorials werden empfohlen: Erste Schritte mit Java

Das obige ist der detaillierte Inhalt vonImplementierung der Kartensortierung in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen