Im Allgemeinen ist Map eine Datenstruktur, die aus Schlüssel-Wert-Paaren besteht, und jeder Schlüssel ist in der Sammlung einzigartig. Lassen Sie uns K und V zur Darstellung von Schlüsseln und Werten verwenden, um die neun Hauptprobleme von Map in Java zu erklären.
0. Map in Listentyp konvertieren
In Java bietet die Map-Schnittstelle drei Sammlungserfassungsmethoden: Schlüsselsatz, Wertesatz und Schlüsselwertsatz. Sie können alle über den Konstruktor oder die addAll()-Methode in den Listentyp konvertiert werden. Der folgende Code veranschaulicht, wie eine ArrayList aus einer Map erstellt wird:
// key list List keyList = new ArrayList(map.keySet()); // value list List valueList = new ArrayList(map.valueSet()); // key-value list List entryList = new ArrayList(map.entrySet());
1. Traverse the Map through Entry
Diese Art der Existenz als Schlüssel-Wert-Paare in Java ist namens Map.Entry. Map.entrySet() gibt einen Schlüsselwertsatz zurück, was eine sehr effiziente Traversalmethode ist.
for(Entry entry: map.entrySet()) { // get key K key = entry.getKey(); // get value V value = entry.getValue(); }
Iterator Wir verwenden ihn auch oft, insbesondere vor JDK1.5
Iterator itr = map.entrySet().iterator(); while(itr.hasNext()) { Entry entry = itr.next(); // get key K key = entry.getKey(); // get value V value = entry.getValue(); }
2. Verwenden Sie die Taste, um die Kartensortierung anzupassen
Das Sortieren erfordert häufige Operationen auf der Karte. Eine Möglichkeit besteht darin, es über einen Komparator zu implementieren:
List list = new ArrayList(map.entrySet()); Collections.sort(list, new Comparator() { @Override public int compare(Entry e1, Entry e2) { return e1.getKey().compareTo(e2.getKey()); } });
Die andere Möglichkeit ist über SortedMap, muss jedoch implementiert werden Vergleichbare Schnittstelle.
SortedMap sortedMap = new TreeMap(new Comparator() { @Override public int compare(K k1, K k2) { return k1.compareTo(k2); } }); sortedMap.putAll(map);
3. Sortieren Sie die Karte nach Wert
Dies ähnelt in gewisser Weise dem vorherigen Punkt, der Code lautet wie folgt:
List list = new ArrayList(map.entrySet()); Collections.sort(list, new Comparator() { @Override public int compare(Entry e1, Entry e2) { return e1.getValue().compareTo(e2.getValue()); } });
4. Initialisieren Sie eine statische Konstanten-Map
Wenn Sie eine globale statische Map erstellen möchten, stehen uns die folgenden zwei Methoden zur Verfügung, die threadsicher sind.
Obwohl wir in Test1 deklariert haben, dass die Karte statisch ist, können wir ihren Wert während der Initialisierung dennoch ändern, genau wie Test1.map.put(3,"two");
In Test2 übergeben wir eine innere Klasse und Stellen Sie es so ein, dass es nicht änderbar ist. Wenn wir dann Test2.map.put(3, „drei“) ausführen, wird ein
UnsupportedOperationException 异常来禁止你修改。 public class Test1 { private static final Map map; static { map = new HashMap(); map.put(1, "one"); map.put(2, "two"); } } public class Test2 { private static final Map map; static { Map aMap = new HashMap(); aMap.put(1, "one"); aMap.put(2, "two"); map = Collections.unmodifiableMap(aMap); } }
5 angezeigt. und Hashtable
In der Map-Schnittstelle gibt es drei Implementierungen: HashMap, TreeMap und Hashtable.
Sie sind unterschiedlich. Weitere Informationen finden Sie im Artikel „HashMap vs. TreeMap vs. Hashtable vs. LinkedHashMap“.
6. Rückwärtsabfrage in der Karte
Nachdem wir der Karte ein Schlüssel-Wert-Paar hinzugefügt haben, bedeutet dies, dass zwischen Schlüsseln und Werten eine Eins-zu-Eins-Entsprechung besteht Karte, und ein Schlüssel entspricht einem Wert. Aber manchmal benötigen wir eine umgekehrte Abfrage, z. B. das Finden des Schlüssels über einen bestimmten Wert. Diese Datenstruktur wird als bidirektionale Karte bezeichnet. Leider wird sie von JDK nicht unterstützt.
Apache und Guava stellen diese bidirektionale Kartenimplementierung gemeinsam bereit. In der Implementierung wird festgelegt, dass sowohl Schlüssel als auch Werte eine 1:1-Beziehung haben müssen.
7. Karte kopieren
Java bietet viele Methoden zum Kopieren einer Karte, diese Methoden sind jedoch möglicherweise nicht immer synchronisiert. Einfach ausgedrückt: Wenn sich eine Karte ändert, bleibt die kopierte Karte dieselbe. Das Folgende ist eine effizientere Implementierungsmethode:
Map copyMap = Collections.synchronizedMap(map); Natürlich gibt es noch eine andere Methode, nämlich das Klonen. Unser Java-Urheber Josh Bloch empfiehlt diesen Ansatz jedoch nicht. Er sagte einmal in einem Interview zum Thema Map-Klonen: Klonmethoden werden in vielen Klassen bereitgestellt, weil die Leute sie wirklich brauchen. Aber das Klonen ist sehr einschränkend und verursacht in vielen Fällen unnötige Auswirkungen.
8. Erstellen Sie eine leere Karte.
Wenn diese Karte nicht verfügbar ist, können Sie dies über Folgendes erreichen:
map = Collections.emptyMap();
Im Gegenteil, wenn wir sie verwenden , Sie können direkt
map = new HashMap();