Heim >Java >javaLernprogramm >4 Hauptkartenimplementierungsklassen
Map ist eine Sammlungsschnittstelle von Schlüssel-Wert-Paaren. Zu den 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 sind HashMap-Werte nicht in Ordnung Ja, es wird gemäß dem HashCode des Schlüssels implementiert, das heißt, die Daten werden gemäß dem HashCode-Wert des Schlüssels gespeichert. Sein Wert kann direkt basierend auf dem Schlüssel abgerufen werden, und er hat einen sehr schnellen Zugriff Geschwindigkeit. 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: kann die gespeicherten Datensätze nach Schlüssel sortieren. Standardmäßig können Sie einen Sortierkomparator angeben, um TreeMap zu durchlaufen 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; das heißt, nur ein Thread kann in die Hashtable schreiben Daher ist Hashtale beim Schreiben immer langsamer. Hashtable erbt nur von der abstrakten Klasse Dictionary, hashMap und treeMap erben beide von der abstrakten Klasse AbstractMap und LinkedHashMap erbt von hashMap.
LinkedHashMap: speichert die Einfügereihenfolge von Datensätzen. Wenn Sie Iterator zum Durchlaufen von LinkedHashMap verwenden, wird der zuerst erhaltene Datensatz beim Durchlaufen definitiv langsamer eingefügt. Sowohl Schlüssel als auch Wert dürfen leer und asynchron sein.
Gesunder Menschenverstand:
Erben Collection- und Map-Sammlungen von Object?
Nein, beides sind Schnittstellen. Object ist eine Klasse. Wie kann es von Object erben? Weitere Informationen finden Sie in der spezifischen Schnittstelle unter java.util.
2. Kartensortierung
TreeMap
TreeMap ist standardmäßig in aufsteigender Reihenfolge, wenn wir die Sortiermethode ändern müssen, müssen wir einen Komparator verwenden.
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)); } } }
Das obige Beispiel dient der Sortierung basierend auf dem Schlüsselwert von TreeMap, aber manchmal müssen wir basierend auf 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()); } } }
Wir sind alle HashMap-Werte Es gibt 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()); } } }
Das obige ist der detaillierte Inhalt von4 Hauptkartenimplementierungsklassen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!