HashMap mit Null-Taste und der Null-Wert
Betrachten Sie den folgenden Code :
import java.util.*;
class Employee {
String name;
public Employee(String nm) {
this.name=nm;
}
}
public class HashMapKeyNullValue {
Employee e1;
public void display(){
Employee e2=null;
Map map=new HashMap();
map.put(e2, "25");
System.out.println("Getting the Value When e2 is set as KEY");
System.out.println("e2 : "+map.get(e2));
System.out.println("e1 : "+map.get(e1));
System.out.println("null : "+map.get(null));
map.put(e1, "");
System.out.println("Getting the Value when e1 is set as KEY");
System.out.println("e2 : "+map.get(e2));
System.out.println("e1 : "+map.get(e1));
System.out.println("null : "+map.get(null));
map.put(null, null); //null as key and null as value
System.out.println("Getting the Value when setting null as KEY and null as value");
System.out.println("e2 : "+map.get(e2));
System.out.println("e1 : "+map.get(e1));
System.out.println("null : "+map.get(null));
map.put(null, "30");
System.out.println("Getting the Value when setting only null as KEY");
System.out.println("e2 : "+map.get(e2));
System.out.println("e1 : "+map.get(e1));
System.out.println("null : "+map.get(null));
}
public static void main(String[] args) {
new HashMapKeyNullValue().display();
}
}
Die Ausgabe des Programms ist :
Getting the Value When e2 is set as KEY
e2 : 25
e1 : 25
null : 25
Getting the Value when e1 is set as KEY
e2 :
e1 :
null :
Getting the Value when setting null as KEY and null as value
e2 : null
e1 : null
null : null
Getting the Value when setting only null as KEY
e2 : 30
e1 : 30
null : 30
Hier, wie e1, e2, and null
als Schlüssel miteinander verbunden sind. Alle drei sind zugeordnet gleichen hashcode ? Wenn ja, WARUM ?
Da alle drei zu sein scheint, anders Aussehen, die änderung eines Wertes ändert sich die andere. Bedeutet es, dass nur ein Eintrag für den Schlüssel ist in HashMap
entweder e1, e2, or null
weil alle behandelt werden wie die gleichen Schlüssel.
Die Werte von e1 und e2 sind null. Java ist pass-by-value und pass wird nur der Wert einer variable, wenn diese variable wird als Aufruf-parameter. Das ist die variable, die werden niemals neu zugewiesen werden, innerhalb der Funktion und den Namen der parameter in der Funktion haben nichts zu tun mit irgendwelchen Variablen.
mögliche Duplikate von HashMap mit null als Schlüssel
mögliche Duplikate von HashMap mit null als Schlüssel
InformationsquelleAutor Nizam | 2014-09-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
HashMap
nicht nennen, hashcode, wenn null übergeben wird, als Schlüssel-und null-Taste gehandhabt wird als besonderer Fall.Put-Methode
HashMap
stellt null Schlüssel im Eimer 0 und Karten null wie Taste, um den übergebenen Wert. HashMap handelt es sich um verkettete Liste Datenstruktur. HashMap verwendet verkettete Liste Datenstruktur intern.Verkettete Liste Datenstruktur verwendet
HashMap
(eine statische Klasse inHashMap.java
)In der Einstiegsklasse der K eingestellt ist null und Wert zugeordnet übergebene Wert in put-Methode.
Get-Methode
Während in
Hashmap
get-Methode, die prüft, ob Schlüssel übergeben null. Suche Wert für null Schlüssel im Eimer 0.Daher kann es nur eine null-Taste auf eine
hashmap
Objekt.Nur zur info, Die Antwort ist vollkommen richtig, aber es gibt leichte änderungen über HashMap-Implementierung seit java 1.8. Statt der verlinkten Liste eine ausgewogene Bäume können verwendet werden, als "Eimer"
InformationsquelleAutor Sandeep Vaid
Wenn Sie pass
null
als Karte, Schlüssel, geht es in den0 bucket
. Alle Werte der null-Taste wird es gehen. Das ist, warum gibt es denselben Wert, dazu führen, dass alle Tasten, die Sie bereitstellen, sindnull
und sind im selben bucket Ihrer HashMap.ja, immer die Letzte (v2)
InformationsquelleAutor Kamil Kłys
Incase null Schlüssel , Hashmap-Implementierung betrachten Sie es als speziellen Fall und doesnot rufen hashCode-Methode stattdessen speichert es den Eintrag Objekt 0 bucket Lage.
InformationsquelleAutor Ravi Soni
Einer HashMap kann speichern nur einen Wert pro Schlüssel. Wenn Sie möchten, speichern Sie mehrere Werte, die Sie verwenden müssen, eine MultivalueHashMap (Google Guava und Apache Commons Collections enthalten Implementierungen von solchen anzeigen).
e1 und e2 haben den Wert null, da Sie nicht jedes Objekt zuweisen. Also, wenn Sie verwenden Sie diese Variablen, die Schlüssel des map-Eintrag ist auch null, was führt zu deinem Ergebnis. Null hat keinen hashcode, aber toleriert wird als Schlüssel in der HashMap (es gibt auch andere Map-Implementierungen, die nicht Null als Schlüssel).
InformationsquelleAutor dunni
Wenn Sie NULL HashMap gibt es spezielle überprüfen, wenn Sie versuchen, NULL als Schlüssel (genannt putForNullKey()). Es ist der Besondere Fall, und funktioniert nicht, wie Sie versuchen, einige Gegenstände, die nicht null sind, und wie Sie sehen können, es auch gar nicht gehen, um die hash-Berechnung.
InformationsquelleAutor Mykola Evpak