Karte wird zum Speichern von Daten mit Zuordnungsbeziehungen verwendet: Schlüssel - Wert
Für Set ist die unterste Ebene tatsächlich immer noch eine Karte. aber Set Wählen Sie, Value nicht zu verwenden, das heißt, der Value-Wert von Set ist immer eine Konstante
Der Schlüssel und der Wert in Map können beliebige Datentypen sein und werden in das HashMap$Node-Objekt gekapselt
#🎜 🎜#Der Schlüssel in der Karte kann nicht wiederholt werden, aber der Wert kann wiederholt werden. Wenn derselbe Schlüssel vorhanden ist, werden die entsprechenden und Ersetzungsvorgänge ausgeführt2.Map-Schnittstelle AnalyseSpeicherkartenschlüssel Das Wertepaar befindet sich in HashMap$Nodetab[i] = newNode(hash, key, value, null); -- Node<K,V> newNode(int hash, K key, V value, Node<K,V> next) { return new Node<>(hash, key, value, next); }Was ist also der Datentyp dieses Node-Knotens? Werfen wir einen Blick auf den Quellcode: (Er implementiert auch die Entry-Schnittstelle)
static class Node<K,V> implements Map.Entry<K,V> { final int hash; // 存放hash值 final K key; // 存放key值 V value; // 存放Value值 Node<K,V> next; // 存放下一个个节点,以形成链表结构 }k-v Um dem Programmierer das Durchlaufen zu erleichtern, wird auch eine EntrySet-Sammlung erstellt , der den Elementtyp „Eintrag“ speichert, und ein Eintragsobjekt enthält k, v, aber im Wesentlichen zeigt der k-v-Wert hier immer noch auf die Daten in einem Node-Knoten, das heißt, k-v speichert hier immer noch Adressdaten
// k-v存在有EntrySet的一个指向 Set set = map.entrySet(); System.out.println(set.getClass());# 🎜🎜 #Ausgabe: class java.util.HashMap$EntrySet
Wie spiegelt sich also diese Funktion wider, die das Durchqueren durch Programmierer erleichtert?
Der Grund dafür ist, dass Map.Entry zwei sehr wichtige Methoden bereitstellt: K getKey(); V getValue();. Wir können die Karte also auf folgende Weise durchqueren:
Set set = map.entrySet(); System.out.println(set.getClass()); for (Object obj : set) { Map.Entry entry = (Map.Entry) obj; System.out.println(entry.getKey()); System.out.println(entry.getValue()); }
Wie kann man also beweisen, dass der in Eintrag gespeicherte k-v nur der Zeiger auf die Adresse ist? Ganz einfach
Durch das Debuggen werfen wir zunächst einen Blick auf die in der Karte gespeicherten Daten. Die Adresse des Schlüssels Nr. 2 lautet @727
#🎜🎜 ## 🎜🎜# Werfen wir einen Blick auf die Adresse des Schlüssels Nr. 2 im Set, die genau dieselbe ist: 3.Kartenschnittstelle MethodeCodebeispiel:
Map map = new HashMap(); // 添加键值对 map.put("no1","dahe"); map.put("no2","zhangsan"); // Key重复会进行替换 map.put("no1","lisi"); System.out.println(map); // 根据键删除映射关系 map.remove("no1"); System.out.println(map); // 根据key得到值 Object no2 = map.get("no2"); System.out.println(no2); // 获取键值对数量 System.out.println(map.size()); // 判空 System.out.println(map.isEmpty()); // 清空 // map.clear(); // 查找键是否存在 System.out.println(map.containsKey("ok"));
Die erste Formel: Nehmen Sie alle Schlüssel heraus und erhalten Sie den entsprechenden Wert durch Schlüssel
// 取出所有的key,通过key取出对应的value Set keySet = map.keySet(); for (Object o : keySet) { System.out.println(o); System.out.println(map.get(o)); }
// 把所有的value值取出 Collection values = map.values(); for (Object value : values) { System.out.println(value); }
Die dritte Formel: Erhalten Sie k-v durch EntrySet
// 通过EntrySet来获取 k-v Set entrySet1 = map.entrySet(); for (Object o : entrySet1) { // 将entry 转成 Map.Entry Map.Entry m = (Map.Entry) o; System.out.println(m.getKey()); System.out.println(m.getValue()); }
Das obige ist der detaillierte Inhalt vonSo verwenden Sie Map in der Java-Sammlungsklasse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!