Ok, oto fragment, którego nie rozumiem.
Przy próbie pobrania obiektu przy użyciu metody get()
i zwróceniu wartości zerowej nadal możliwe jest przechowywanie null
jako obiektu skojarzonego z kluczem podanym w metodzie get()
. Możesz określić, czy tak jest, przekazując klucz obiektu do mapy dla metody containsKey()
. Ten wraca true
jeśli klucz jest przechowywany w mapie
Tak, jak jest containsKey()
powinien mi powiedzieć, czy wartość związany z kluczem dostarczonym jest null
?
To jest the reference jeśli chcesz sprawdzić. Page 553Zrozumienie HashMap <K,V>
Odpowiedz
Rozważmy prosty fragment kodu:
Map<String, String> m = new HashMap<String, String>();
m.put("key1", "value1");
m.put("key2", null);
System.out.println("m.get(\"key1\")=" + m.get("key1"));
System.out.println("m.containsKey(\"key1\")=" + m.containsKey("key1"));
System.out.println("m.get(\"key2\")=" + m.get("key2"));
System.out.println("m.containsKey(\"key2\")=" + m.containsKey("key2"));
System.out.println("m.get(\"key3\")=" + m.get("key3"));
System.out.println("m.containsKey(\"key3\")=" + m.containsKey("key3"));
Jak widać kładę na mapie dwie wartości, z których jedna jest NULL. Thene poprosiłem mapę o trzy wartości: dwie z nich są obecne (jedna jest zerowa), jedna nie. Spójrz na wynik:
m.get("key1")=value1
m.containsKey("key1")=true
m.get("key2")=null
m.containsKey("key2")=true
m.get("key3")=null
m.containsKey("key3")=false
Drugi i trzeci to trudna część. key2
jest obecny z wartością pustą, więc przy użyciu get()
nie można rozróżnić, czy element nie znajduje się na mapie, czy jest na mapie z wartością null
. Ale używając containsKey()
możesz, ponieważ zwraca ona boolean
.
Map<String, Object> map = new HashMap<String, Object>();
map.put("Foo", null);
System.out.println(map.containsKey("Foo"));
System.out.println(map.containsKey("Boo"));
WYJŚCIE:
true
false
get()
powraca null
w dwóch przypadkach:
- Klucz nie istnieje na mapie.
- Klucz istnieje, ale powiązana z nim wartość to
null
.
Nie można stwierdzić z poziomu get()
, które jest prawdziwe. Jednak containsKey()
powie Ci, czy klucz był obecny na mapie, niezależnie od tego, czy powiązana z nim wartość to null
.
+1 - edytowane w celu wyjaśnienia –
co jest prawie tym, co powiedziałem w poście powyżej. – FSP
Tak, książka mówi, że ma pomóc mi sprawdzić, czy wartość V HashMap
containsKey powie Ci, czy klucz w ogóle jest w mapie. Rozważmy przypadek, w którym klucz jest obecny z wartością pustą, a drugi przypadek, w którym klucz, którego szukasz, w ogóle nie występuje w mapie mieszającej.
+1 prawidłowa odpowiedź. –
(get() == null && containsKey()) == value is null
- 1. Konwertuj zestaw <Map.Entry <K, V>> na HashMap <K, V>
- 2. Domyślne typy HashMap dla K i V
- 3. Zrzut Java HashMap <K,V> do XML iz powrotem
- 4. Jak utworzyć listę <T> z mapy <K,V> i listę <K> kluczy?
- 5. zrozumienie metoda komentarz dla hash() klasy HashMap w java 8
- 6. użytkowania <c:forEach> z HashMap
- 7. Get ArrayList <HashMap <String, String >> ceni
- 8. ArrayList <HashMap <String, String >> do String []
- 9. HashMap Java 8 realizacja
- 10. Zrozumienie regex [\ s \ S - [<>]] *
- 11. HashMap w HashMap
- 12. HashMap wykorzystuje LinkedList wewnętrznie
- 13. mylić o hashmap # resize
- 14. HashMap <String, boolean> skopiuj wszystkie klucze do HashMap <String, Integer> i zainicjuj wartości do zera
- 15. Java8: HashMap <X, Y> do HashMap <X, Z> użyciu Stream/Map-Reduce/Collector
- 16. Zrozumienie algorytmu QuickSelect
- 17. Wstawianie wartości na mapie < K, V >
- 18. błędy rozszerzeń Rodzaj słownik <'K, 'V>
- 19. Zrozumienie skomplikowanego typu Podpis
- 20. Dodawanie do linkedList w HashMap <String, LinkedList>
- 21. HashMap <String, Integer> Wyszukaj część klucza?
- 22. sortowanie java HashMap <String, Integer>. Jak to posortować?
- 23. Korzystanie SparseIntArray zamiast HashMap <Integer, Integer> z putSeriazable
- 24. Jak przekonwertować mapę HashMap na ciąg znaków K/V w języku Java 8 ze strumieniami
- 25. Wyszukaj HashMap w ArrayList of HashMap
- 26. Jak utworzyć typ implementujące IDictionary <'K, 'V> i IEnumerable <'V>
- 27. Zrozumienie C rozmontowanego połączenia
- 28. Wdrażanie HashMap
- 29. Nie można rzutować HashMap <String, String> na interfejs rozszerzający mapę <String, String>
- 30. Jak iterować listę znaków <HashMap <String, String >>?
W porządku, to wyjaśniło to poprawnie. W prawdziwym programowaniu, będę musiał najpierw użyć 'containsKey()', aby sprawdzić, czy klucz jest poprawny, a następnie wyświetlić wartość z nim powiązaną.Jeśli nie, to wyświetl komunikat lub wyślij wyjątek :) –
@FasihKhatib, który jest naprawdę potrzebny, jeśli przechowujesz 'null's na mapie. Jeśli nigdy nie przechowujesz 'null' na mapie, nie ma większego sensu sprawdzanie poprawnych mapowań zerowych. –