Heim >Java >javaLernprogramm >Kann eine Karte in Java nach Schlüssel sortiert werden?

Kann eine Karte in Java nach Schlüssel sortiert werden?

青灯夜游
青灯夜游Original
2019-12-31 15:59:523418Durchsuche

Kann eine Karte in Java nach Schlüssel sortiert werden?

Kann die Karte nach Schlüssel sortiert werden?

Die Karte kann nach Schlüssel sortiert werden. Schauen wir uns unten ein Beispiel an.

Beispiel: Java Map Sortierung nach Schlüssel und Sortierung nach Wert

package test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.Map.Entry;

public class MapSortDemo {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Map<String, String> hMap = new HashMap<String, String>();
        hMap.put("a", "3");
        hMap.put("z", "2");
        hMap.put("b", "6");
        hMap.put("o", "9");

        System.out.println("根据key升序排序"); 
        Map<String, String> sortByKeyResultMap = sortMapByKey(hMap);    //按Key进行排序
        Iterator<Map.Entry<String, String>> sortByKeyEntries = sortByKeyResultMap.entrySet().iterator(); 
        while (sortByKeyEntries.hasNext()) { 
          Map.Entry<String, String> entry = sortByKeyEntries.next(); 
          System.out.println("Key = " + entry.getKey() + "------->Value = " + entry.getValue()); 
        }
        
        System.out.println("------------------------------"); 
        
        System.out.println("根据value降序排序"); 
        Map<String, String> sortByValueResultMap = sortMapByValue(hMap); //按Value进行排序
        Iterator<Map.Entry<String, String>> sortByValueEntries = sortByValueResultMap.entrySet().iterator(); 
        while (sortByValueEntries.hasNext()) { 
          Map.Entry<String, String> entry = sortByValueEntries.next(); 
          System.out.println("Key = " + entry.getKey() + "------->Value = " + entry.getValue()); 
        }
    }
    /**
     * 使用 Map按key进行排序
     * @param map
     * @return
     */
    public static Map<String, String> sortMapByKey(Map<String, String> map) {
        if (map == null || map.isEmpty()) {
            return null;
        }
//        Map<String, String> sortMap = new TreeMap<String, String>(new MapKeyComparator());
        Map<String, String> sortMap = new TreeMap<String, String>(new Comparator<String>() {
            public int compare(String obj1, String obj2) {
                return obj1.compareTo(obj2);//升序排序
            }
        });
        sortMap.putAll(map);
        return sortMap;
    }
    
    /**
     * 使用 Map按value进行排序
     * @param map
     * @return
     */
    public static Map<String, String> sortMapByValue(Map<String, String> map) {
        if (map == null || map.isEmpty()) {
            return null;
        }
        Map<String, String> sortedMap = new LinkedHashMap<String, String>();
        List<Map.Entry<String, String>> entryList = new ArrayList<Map.Entry<String, String>>(map.entrySet());
//        Collections.sort(entryList, new MapValueComparator());
        Collections.sort(
            entryList, 
            new Comparator<Map.Entry<String, String>>(){
                   public int compare(Entry<String, String> o1, Entry<String, String> o2) {
                       return o2.getValue().compareTo(o1.getValue());// 降序排序
                   }
            }
        );

        Iterator<Map.Entry<String, String>> iter = entryList.iterator();
        Map.Entry<String, String> tmpEntry = null;
        while (iter.hasNext()) {
            tmpEntry = iter.next();
            sortedMap.put(tmpEntry.getKey(), tmpEntry.getValue());
        }
        return sortedMap;
    }
}

Java Map

Map ist eine Sammlungsschnittstelle von Schlüssel-Wert-Paaren und seine Implementierung Die Klassen umfassen hauptsächlich: HashMap, TreeMap, Hashtable und LinkedHashMap usw.

Map erlaubt keine doppelten Schlüssel, aber doppelte Werte.

1. HashMap:

Die am häufigsten verwendete Karte speichert Daten entsprechend dem Hashcode-Wert des Schlüssels. Sein Wert kann direkt anhand des Schlüssels abgerufen werden (da derselbe Schlüssel den gleichen Wert hat). Hashcode-Wert und Adresse Der Hashcode-Wert speichert den Wert, sodass der Wert direkt anhand des Schlüssels abgerufen werden kann. Beim Durchlaufen ist die Reihenfolge der Datenabrufe nur bei HashMap möglich Der Schlüssel eines Datensatzes darf höchstens null sein und ermöglicht mehrere. Der Wert des Datensatzes ist null. HashMap unterstützt keine Thread-Synchronisierung, dh mehrere Threads können gleichzeitig HashMap schreiben, was zu Dateninkonsistenzen führt . Wenn eine Synchronisierung erforderlich ist, können Sie HashMap mit der Methode synchronziedMap synchronisieren oder concurrentHashMap verwenden Werte müssen leer sein und die Thread-Synchronisierung unterstützen, d. h. es kann immer nur ein Thread in die HashTable schreiben. Dadurch wird HashTable auch beim Schreiben langsamer! >

ist eine Unterklasse von HahsMap, behält jedoch die Einfügereihenfolge der Datensätze beim Durchlaufen bei. Beim Durchlaufen können Sie auch Parameter übernehmen und nach der Anzahl der Anwendungen sortieren ist langsamer als HahsMap, aber es gibt eine Ausnahme: Wenn die Kapazität von HashMap groß und die tatsächlichen Daten klein sind, ist die Durchquerung langsamer als bei LinkedHashMap (da es sich um eine Kette handelt), da die Durchlaufgeschwindigkeit von HashMap davon abhängt Kapazität und die Durchlaufgeschwindigkeit von LinkedHashMap hängen nur von der Datenmenge ab

4. TreeMap:

implementiert die sortMap-Schnittstelle, die die gespeicherten Datensätze nach dem Schlüssel Sortieren (Standard) sortieren kann in aufsteigender Reihenfolge) können Sie auch einen Sortierkomparator angeben. Die beim Durchlaufen erhaltenen Daten werden sortiert.

Empfohlenes Lernen:

Java-Video-Tutorial

Das obige ist der detaillierte Inhalt vonKann eine Karte in Java nach Schlüssel sortiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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