Różnica między HashSet i HashMap?
Pomijając fakt, że HashSet
nie pozwala na powielanie wartości, jaka jest różnica między HashMap
i Hashset
?
Chodzi mi o implementację? Jest to trochę niejasne, ponieważ obie używają tabel skrótów do przechowywania wartości.
21 answers
Są zupełnie innymi konstrukcjami. A HashMap
jest implementacją Map
. A Map mapuje Klucze do wartości. Szukanie klucza odbywa się za pomocą skrótu.
Z drugiej strony, a HashSet
jest implementacją Set
. Zbiór jest zaprojektowany tak, aby pasował do modelu matematycznego zbioru. A {[2] } używa HashMap
, aby poprzeć swoją implementację, jak zauważyłeś. Jednak implementuje zupełnie inny interfejs.
Kiedy szukasz tego, co będzie najlepsze Collection
dla Twoich celów, Ten Tutorial jest dobrym miejscem startowym. Jeśli naprawdę chcesz wiedzieć, o co chodzi, to na to też jest książka.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-18 13:09:06
HashSet jest zestawem , np. {1,2,3,4,5}
HashMap jest mapą klucz -> wartość (Klucz do wartości), np. {A - > 1, b - > 2, c -> 2, d -> 1}
Zauważ w moim przykładzie powyżej, że w Hashmapie nie mogą być duplikowane klucze, ale mogą mieć zduplikowane wartości.
W HashSet nie może być duplikatów elementów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-05 14:00:39
HashSet
- Klasa HashSet implementuje interfejs zestawu
- W HashSet przechowujemy obiekty (elementy lub wartości) np. jeśli mamy HashSet elementów łańcuchowych to może on przedstawiać zestaw elementów HashSet: {"Hello", "Hi"," Bye","Run"}
- HashSet nie pozwala na powielanie elementów, które oznaczają, że nie można przechowywać zduplikowanych wartości w HashSet.
- HashSet pozwala na posiadanie pojedynczej wartości null.
-
HashSet nie jest zsynchronizowany, co oznacza, że nie są nadaje się do operacji bezpiecznych dla wątku, dopóki nie zostanie wyraźnie zsynchronizowana.[podobieństwo]
add contains next notes HashSet O(1) O(1) O(h/n) h is the table
HashMap
- Klasa HashMap implementuje interfejs mapy
- HashMap jest służy do przechowywania par klucza i wartości. Krótko mówiąc, utrzymuje mapowanie klucza i wartości (Klasa HashMap jest mniej więcej równoważna Hashtable, z tą różnicą, że nie jest zsynchronizowana i pozwala na null.) To jest jak można reprezentować Elementy HashMap jeśli ma klucz integer i wartość typu String: np. {1 - > "Hello", 2->" Hi", 3 - > " Bye", 4 - >"Run"}
- HashMap nie pozwala na duplikowanie kluczy, ale pozwala na posiadanie duplikatów wartości.
- HashMap zezwala na pojedynczy klucz null i dowolną liczbę wartości null.
-
HashMap nie jest zsynchronizowany, co oznacza, że nie nadaje się do operacji bezpiecznych dla wątków, dopóki nie zostanie zsynchronizowany jawnie.[podobieństwo]
get containsKey next Notes HashMap O(1) O(1) O(h/n) h is the table
Proszę zapoznać się z ten artykuł aby znaleźć więcej informacji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-21 10:32:37
Szkoda, że obie nazwy zaczynają się na Hash . To najmniej ważna część z nich. Ważne części pochodzą po Hash - Zestaw i mapa , jak zauważyli inni. Są one odpowiednio zbiorem - zbiorem nieuporządkowanym - oraz Map - zbiorem z dostępem z kluczem. Zdarza się, że są one implementowane z hashami - stąd biorą się nazwy - ale ich istota jest ukryta za tą częścią ich nazwiska.
Nie myl się ich imionami; są to głęboko różne rzeczy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-05 18:30:18
HashSet pozwala nam przechowywać obiekty w zestawie, gdzie as HashMap pozwala nam przechowywać obiekty na podstawie klucza i wartości. Każdy obiekt lub przechowywany obiekt będzie miał klucz.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-05 13:59:57
Jak sugerują nazwy, HashMap jest asocjacyjnym mapą (mapowanie z klucza na wartość), HashSet jest po prostu zestawem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-05 14:00:00
1) Pierwszą i najważniejszą różnicą między HashMap i HashSet jest to, że HashMap jest implementacją interfejsu mapy, podczas gdy HashSet jest implementacją interfejsu zestawu, co oznacza, że HashMap jest kluczową strukturą danych opartą na wartości, a HashSet gwarantuje unikalność, nie pozwalając duplicates.In reality HashSet jest opakowaniem wokół HashMap w Javie, jeśli spojrzysz na kod metody add (E e) HashSet.java zobaczysz następujący kod:
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
Gdzie jego umieszczenie obiektu na mapie jako klucz i wartość jest obecny ostateczny obiekt, który jest atrapa.
2) Druga różnica między HashMap i HashSet polega na tym, że używamy metody add() do umieszczania elementów W Set, ale używamy metody put() do wstawiania klucza i wartości do HashMap w Javie.
3) HashSet zezwala tylko na jeden klucz null, ale HashMap może zezwolić na jeden klucz null + wiele wartości null.
To wszystko na różnicy między HashSet i HashMap w Javie. Podsumowując HashSet i HashMap to dwa różne rodzaje kolekcji bycie ustawionym i inne bycie mapą.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-16 23:28:26
A HashMap
jest dodawanie, otrzymywanie, usuwanie,... obiekty indeksowane przez własny klucz dowolnego typu.
A HashSet
polega na dodawaniu elementów, usuwaniu elementów i sprawdzaniu ich obecności poprzez porównanie ich skrótów.
Więc HashMap zawiera elementy, a HashSet zapamiętuje ich skróty.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-05 14:04:21
Różnice: w odniesieniu do heirarchii: HashSet implementuje Set. HashMap implementuje mapę i przechowuje mapowanie kluczy i wartości.
Użycie HashSet i HashMap w odniesieniu do bazy danych pomogłoby zrozumieć znaczenie każdego z nich.
HashSet: jest zwykle używany do przechowywania unikalnych obiektów kolekcji.
Np.: może być używana jako klasa implementacji do przechowywania wielu do jednego statku relacji między
class Item oraz Class Bid where (Item ma wiele Oferty)
HashMap: jest używany do mapowania klucza do wartości.wartością może być null lub dowolny obiekt / lista obiektów (który sam w sobie jest obiektem).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-05 18:22:37
różnice między HashSet i HashMap w Javie
HashSet wewnętrznie używa HashMap do przechowywania obiektów.po wywołaniu metody add (String) wywołuje metodę HahsMap put (klucz,wartość), gdzie key=obiekt String & value=nowy obiekt (Atrapa).nie zachowuje więc duplikatów, ponieważ klucze są niczym innym jak obiektem Value.
Obiekty, które są przechowywane jako klucz w Hashset/HashMap powinny zastąpić hashcode & equals contract.
Klucze używane do dostępu/przechowywania obiektów wartości w Hashmapie powinien być zadeklarowany jako ostateczny, ponieważ gdy jest zmodyfikowany obiekt Value nie może być zlokalizowany & zwraca null.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-16 05:14:36
Hashset wewnętrznie implementuje Hashmapę. Jeśli widzisz wewnętrzną implementację on http://javaconceptoftheday.com/how-hashset-works-internally-in-java/ wartości wstawione do HashSet są przechowywane jako klucze w Hashmapie, a wartość jest atrapą obiektu klasy Object. Różnica między HashMap vs HashSet jest:- 1. HashMap zawiera pary wartości klucza i każda wartość może być dostępna za pomocą klucza, gdzie as HashSet musi być iteracją za każdym razem, ponieważ nie ma metody get. 2. HashSet implementuje interfejs Map i pozwala na jedną wartość null jako klucz i wiele wartości null jako wartości.Gdzie as HashSet implementuje interfejs Set, pozwala tylko na jedną wartość null i nie ma zduplikowanych wartości.(Pamiętaj, że jeden klucz null jest dozwolony w kluczu HashMap, stąd jedna wartość null w HashSet jako implementacja HashSet wewnętrznie). 3.HashSet i HashMap nie zachowują kolejności wstawiania podczas iteracji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-11 05:25:04
HashSet używa hashmapy wewnętrznie do przechowywania swoich wpisów. Każdy wpis w wewnętrznej Hashmapie jest kluczowany przez jeden obiekt, więc wszystkie wpisy są hashowane w tym samym zasobniku. Nie pamiętam, czego używa wewnętrzna HashMap do przechowywania swoich wartości, ale tak naprawdę nie ma to znaczenia, ponieważ ten wewnętrzny kontener nigdy nie będzie zawierał zduplikowanych wartości.
EDIT: aby odnieść się do komentarza Mateusza, ma rację; miałem go od tyłu. Wewnętrzny HashMap jest keyed z obiektami, które tworzą Elementy zestawu . Wartości HashMap są obiektem, który jest po prostu przechowywany w zasobnikach HashMap.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-05 14:40:59
Różnice między HashSet i HashMap w Javie
1) pierwszą i najważniejszą różnicą między HashMap i HashSet jest to, że HashMap jest implementacją interfejsu mapy, podczas gdy HashSet jest implementacją interfejsu zestawu, co oznacza, że HashMap jest kluczową strukturą danych opartą na wartości, a HashSet gwarantuje unikalność, nie pozwalając duplicates.In reality HashSet jest opakowaniem wokół HashMap w Javie, jeśli spojrzysz na kod metody add (E e) HashSet.java you zobacz następujący kod:
public boolean add(E e)
{
return map.put(e, PRESENT)==null;
}
Gdzie jego umieszczenie obiektu w mapie jako klucza i wartości jest ostatecznym obiektem obecnym, który jest atrapą.
2) Druga różnica między Hashmapem a HashSet polega na tym, że używamy metody add() do umieszczania elementów W Set, ale używamy metody put() do wstawiania klucza i wartości do HashMap w Javie.
3) HashSet zezwala tylko na jeden klucz null, ale HashMap może zezwolić na jeden klucz null + wiele wartości null.
To wszystko na różnicy między HashSet i HashMap w Javie. Podsumowując HashSet i HashMap to dwa różne typy kolekcji, jeden jest ustawiony, a drugi jest mapą.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-05 09:26:12
HashSet
HashSet jest implementacją interfejsu zestawu, który nie pozwala na duplikowanie wartości wszystkie metody, które są w frameworku kolekcji, są również domyślnie w interfejsie zestawu, ale gdy mówimy o zestawie Hash, najważniejsze jest to, że obiekty, które będą przechowywane w HashSet, muszą nadpisać metody equals() i hashCode (), abyśmy mogli sprawdzić równość i Żadna duplikowana wartość nie jest przechowywana w naszym zestawie.jeśli stworzyliśmy własne obiekty musimy wdrożyć hashCode () i equal () w taki sposób,że będą w stanie poprawnie porównywać obiekty podczas przechowywania w zbiorze tak, aby duplikaty obiektów nie były przechowywane, jeśli nie nadpisaliśmy tej metody obiekty przyjmą domyślną implementację tej metody.
"Metoda": {]} public Boolean metoda add(Object o) jest używana do dodania elementu w zbiorze, który zwraca false, jeśli jest duplikatem wartości w przypadku HashSet, w przeciwnym razie zwraca true, jeśli został dodany z powodzeniem.
HashMap
HashMap jest implementacją interfejsu Map, który mapuje klucz do wartości.Zduplikowane klucze nie są dozwolone na mapie.Zasadniczo interfejs map ma dwie klasy implementacji HashMap i TreeMap główną różnicą jest to, że TreeMap utrzymuje kolejność obiektów, ale HashMap nie będzie.HashMap pozwala na wartości null i klucze null.HashMap nie jest zsynchronizowany, ale Framework collection dostarcza metody, dzięki którym możemy je zsynchronizować, jeśli wiele wątków jest wchodząc na naszą hashmapę i jeden wątek strukturalnie zmienia naszą mapę.
Metoda metoda public Object put (klucz obiektu,wartość obiektu) służy do dodania elementu do mapy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-05 08:59:26
HashMap
jest implementacją Map
, pozwalającą duplikować wartości, Ale nie duplikować kluczy.. Do dodania obiektu wymagana jest para klucz / wartość. Dozwolone są klucze Null i wartości Null. eg:
{The->3,world->5,is->2,nice - > 4}
HashSet
jest implementacją Set
, która nie pozwala na duplikaty .Jeśli próbowano dodać zduplikowany obiekt, wywołanie metody public boolean add(Object o)
, to zestaw pozostaje niezmieniony i zwraca false
. eg:
[the,world, is, nice]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-24 15:45:32
A HashSet jest zaimplementowany w postaci HashMap. To odwzorowanie pomiędzy kluczem a obecnym obiektem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-05 13:59:05
Odpowiedziałeś na swoje pytanie-hashset nie pozwala na powielanie wartości. byłoby trywialne, aby zbudować hashset za pomocą backing hashmap (i tylko sprawdzić, czy wartość już istnieje). domyślam się, że różne implementacje Javy albo to robią, albo implementują jakiś niestandardowy kod, aby zrobić to bardziej efektywnie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-05 13:59:19
Zasadniczo w HashMap, użytkownik musi podać zarówno Klucz, jak i wartość, podczas gdy w HashSet podajesz tylko wartość, klucz jest wyprowadzany automatycznie z wartości za pomocą funkcji hash. Tak więc po posiadaniu zarówno klucza, jak i wartości, HashSet może być przechowywany wewnętrznie jako HashMap.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-07 06:50:44
HashSet i HashMap obie pary przechowują, różnica polega na tym, że w Hashmapie można podać klucz, podczas gdy w HashSet klucz pochodzi z kodu hashowego obiektu
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-23 18:48:58
HashMaps
Zezwalaj na jeden klucz null i wartości null. Nie są zsynchronizowane, co zwiększa wydajność. Jeśli jest to wymagane, możesz je zsynchronizować za pomocą Collections.SynchronizedMap()
Hashtables
nie zezwalaj na klucze null i są zsynchronizowane.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-04 12:22:21
HashMap jest implementacją interfejsu Map HashSet jest implementacją interfejsu Set
HashMap przechowuje dane w postaci pary wartości klucza HashSet przechowuje tylko obiekty
Metoda Put służy do dodawania elementu w mapie Metoda Add służy do dodawania elementu jest ustawiony
W mapie hash wartość hashcode jest obliczana za pomocą obiektu key Obiekt member służy do obliczania wartości hashcode, która może być taka sama dla dwóch obiektów, więc metoda equal () jest używana do sprawdzania równości, jeśli zwraca false, co oznacza, że dwa obiekty są różne.
HashMap jest szybszy niż hashset, ponieważ unikalny klucz jest używany do dostępu do obiektu HashSet jest wolniejszy niż Hashmap
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-04 14:31:58