


Basierend auf Java HashMap, wie das Problem des Einfügens doppelter Schlüsselwerte gelöst werden kann
Fügen Sie doppelte Schlüsselwerte in Java HashMap ein
Um doppelte Werte in HashMap einzufügen, müssen Sie zunächst herausfinden, wie Elemente in HashMap gespeichert werden.
Put-Methode
Jedes in der Karte gespeicherte Element ist ein Schlüssel-Wert-Paar, und sie werden alle über die Put-Methode hinzugefügt, und derselbe Schlüssel hat nur einen zugeordneten Wert in der Karte. Die Put-Methode ist in Map wie folgt definiert.
V put(K key, V value);
put()-Methodenimplementierung:
Zuerst ruft hash(key) den Hashcode() des Schlüssels ab. Die Hashmap findet die Kette, in der die Position eingefügt werden soll, basierend auf dem erhaltenen Hashcode In dieser Kette gibt es das gleiche Schlüssel-Wert-Paar. Nachdem diese Kette gefunden wurde, wird die Methode equal() verwendet, um zu bestimmen, ob bereits ein Schlüssel-Wert-Paar eingefügt werden muss, und dieser Wert vergleicht tatsächlich den Schlüssel.
Es wird zum Speichern eines Schlüssel-Wert-Paares wie Schlüsselwert verwendet. Der Rückgabewert ist der alte Wert des in der Karte gespeicherten Schlüssels. Wenn er zuvor nicht vorhanden war, wird null zurückgegeben. Die Put-Methode von HashMap wird folgendermaßen implementiert.
// 在此映射中关联指定值与指定键。如果该映射以前包含了一个该键的映射关系,则旧值被替换 public V put(K key, V value) { // 当key为null,调用putForNullKey方法,保存null与table第一个位置中,这是HashMap允许为null的原因 if (key == null) return putForNullKey(value); // 使用hash函数预处理hashCode,计算key的hash值 int hash = hash(key.hashCode());//-------(1) // 计算key hash 值在 table 数组中的位置 int i = indexFor(hash, table.length);//------(2) // 从i出开始迭代 e,找到 key 保存的位置 for (Entry<K, V> e = table[i]; e != null; e = e.next) { Object k; // 判断该条链上是否有hash值相同的(key相同) // 若存在相同,则直接覆盖value,返回旧value if (e.hash == hash && ((k = e.key) == key || key.equals(k))) { // 旧值 = 新值 V oldValue = e.value; // 将要存储的value存进去 e.value = value; e.recordAccess(this); // 返回旧的value return oldValue; } } // 修改次数增加1 modCount++; // 将key、value添加至i位置处 addEntry(hash, key, value, i); return null; }
Aus dem Obigen können wir ersehen, dass beim Hinzufügen der entsprechenden Schlüssel-Wert-Kombination, wenn der entsprechende Schlüssel bereits vorhanden ist, der entsprechende Wert direkt geändert und der alte Wert zurückgegeben wird. Bei der Beurteilung, ob der Schlüssel vorhanden ist HashCode des Schlüssels zuerst und vergleicht ihn dann auf Gleichheit oder Gleichheit.
Direkt aus dem obigen Code entspricht der Vergleich dem HashCode von Map.Entry und dem HashCode des Schlüssels. Tatsächlich ist der HashCode von Map.Entry tatsächlich der HashCode des Schlüssels.
Wenn der entsprechende Schlüssel ursprünglich nicht vorhanden ist, wird addEntry aufgerufen, um den entsprechenden Schlüsselwert zur Map hinzuzufügen.
Der von addEntry übergebene Parameter-Hash ist der HashCode des entsprechenden Schlüssels.
Erkennen Sie die Einzigartigkeit von Referenzobjekten als Schlüssel.
Durch das Studium der put () -Methode können wir feststellen, dass wir bei der Beurteilung, ob ein Schlüssel vorhanden ist, zuerst den Hash-Code des Schlüssels vergleichen und dann die Gleichheit oder Gleichheit vergleichen. Daher können die Methoden „rewrite hashCode()“ und „equals()“ die Referenzen von Schlüsseln überschreiben (die auf Objekte mit denselben Instanzvariablen verweisen).
class MyType { private String arga; private String argb; public MyType(String arga, String argb) { this.arga = arga; this.argb = argb; } @Override public int hashCode(){ return this.arga.hashCode() * this.argb.hashCode() ; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (!(obj instanceof MyType)) { return false; } MyType p = (MyType) obj; if (this.arga.equals(p.arga) && this.argb.equals(p.argb)) { return true ; } else { return false ; } } }
Nachdem Sie diese beiden Methoden neu geschrieben haben, können Sie die doppelten Referenzobjekte überschreiben. Wenn Sie den Wert überlagern müssen, verwenden Sie die Methode „containsKey()“, um festzustellen, ob doppelte Schlüsselwerte vorhanden sind, bevor Sie die Methode „put()“ aufrufen Verwenden Sie also die Methode get (), um den ursprünglichen Wert abzurufen und den neu hinzugefügten Wert hinzuzufügen.
HashMap löst das Problem des gleichen Schlüsselwerts.
Einige Szenarien erfordern, dass ein Schlüsselwert mehreren Werten entspricht, aber ein Schlüsselwert in der Karte entspricht nur einem Wertwert, da die Hashmap denselben Schlüsselwert hat put überschreibt den ersten Wert. Um dieses Problem zu lösen, verwenden Sie list zum Speichern
wie folgt:
List<Map<String, List<RecommendationListBO>>> hashList = new ArrayList<>(); Iterator<Map.Entry<String, List<RecommendationListBO>>> iterator = recommendationHashMap.entrySet().iterator(); Map.Entry<String, List<RecommendationListBO>> entry; while (iterator.hasNext()) { entry = iterator.next(); // 往newMap中放入新的Entry HashMap<String, List<RecommendationListBO>> newMap = new LinkedHashMap<>(); newMap.put(entry.getKey().split(",")[0], entry.getValue()); hashList.add(newMap); }
Jedes Mal, wenn Sie eine neue Karte erstellen, fügen Sie sie der Kartenliste hinzu. Die Idee ist ungefähr diese.
Das obige ist der detaillierte Inhalt vonBasierend auf Java HashMap, wie das Problem des Einfügens doppelter Schlüsselwerte gelöst werden kann. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Leitfaden zum Zufallszahlengenerator in Java. Hier besprechen wir Funktionen in Java anhand von Beispielen und zwei verschiedene Generatoren anhand ihrer Beispiele.

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.

Kapseln sind dreidimensionale geometrische Figuren, die aus einem Zylinder und einer Hemisphäre an beiden Enden bestehen. Das Volumen der Kapsel kann berechnet werden, indem das Volumen des Zylinders und das Volumen der Hemisphäre an beiden Enden hinzugefügt werden. In diesem Tutorial wird erörtert, wie das Volumen einer bestimmten Kapsel in Java mit verschiedenen Methoden berechnet wird. Kapselvolumenformel Die Formel für das Kapselvolumen lautet wie folgt: Kapselvolumen = zylindrisches Volumenvolumen Zwei Hemisphäre Volumen In, R: Der Radius der Hemisphäre. H: Die Höhe des Zylinders (ohne die Hemisphäre). Beispiel 1 eingeben Radius = 5 Einheiten Höhe = 10 Einheiten Ausgabe Volumen = 1570,8 Kubikeinheiten erklären Berechnen Sie das Volumen mithilfe der Formel: Volumen = π × R2 × H (4
