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.

Author: nbro, 2010-05-05

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.

 123
Author: justkt,
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.

 273
Author: b.roth,
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

  1. Klasa HashSet implementuje interfejs zestawu
  2. 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"}
  3. HashSet nie pozwala na powielanie elementów, które oznaczają, że nie można przechowywać zduplikowanych wartości w HashSet.
  4. HashSet pozwala na posiadanie pojedynczej wartości null.
  5. 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

  1. Klasa HashMap implementuje interfejs mapy
  2. 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"}
  3. HashMap nie pozwala na duplikowanie kluczy, ale pozwala na posiadanie duplikatów wartości.
  4. HashMap zezwala na pojedynczy klucz null i dowolną liczbę wartości null.
  5. 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.

 42
Author: Avanish Kumar,
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.

 32
Author: Carl Manaster,
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.

 3
Author: Spidfire,
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.

 2
Author: leonbloy,
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ą.

 2
Author: Piqué,
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.

 1
Author: Martijn Courteaux,
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).

 1
Author: frictionlesspulley,
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.

 1
Author: user3539704,
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.

 1
Author: Abhay S,
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.

 0
Author: Andy Gherna,
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ą.

 0
Author: Vibha Sanskrityayan,
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.

 0
Author: Ramkailash,
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]

 0
Author: Meenakshi Pant,
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.

 -1
Author: Matthew Flaschen,
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.

 -1
Author: oedo,
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.

 -1
Author: Munish Goyal,
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

 -1
Author: prateeksarda,
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.

 -1
Author: Appesh,
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

 -1
Author: Hengameh,
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