Inhaltsverzeichnis
Fügen Sie doppelte Schlüsselwerte in Java HashMap ein
Put-Methode
Erkennen Sie die Einzigartigkeit von Referenzobjekten als Schlüssel.
HashMap löst das Problem des gleichen Schlüsselwerts.
Heim Java javaLernprogramm Basierend auf Java HashMap, wie das Problem des Einfügens doppelter Schlüsselwerte gelöst werden kann

Basierend auf Java HashMap, wie das Problem des Einfügens doppelter Schlüsselwerte gelöst werden kann

May 09, 2023 am 10:52 AM
java hashmap

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);
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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 ;                
        }       
    }
}
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

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!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Perfekte Zahl in Java Perfekte Zahl in Java Aug 30, 2024 pm 04:28 PM

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

Zufallszahlengenerator in Java Zufallszahlengenerator in Java Aug 30, 2024 pm 04:27 PM

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

Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

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.

Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

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

Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

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.

Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

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

Zeitstempel für Datum in Java Zeitstempel für Datum in Java Aug 30, 2024 pm 04:28 PM

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.

Java -Programm, um das Kapselvolumen zu finden Java -Programm, um das Kapselvolumen zu finden Feb 07, 2025 am 11:37 AM

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

See all articles