Różnica między hashmapem a hashsetem
- 4083
- 482
- Salwator Słowiński
Kiedy uczysz się nowego języka komputerowego, jedną z pierwszych rzeczy, które zwykle pytasz, jest to, jak pracować z dużymi grupami danych. Ten temat jest często omawiany w temacie „Struktury danych”. Jeśli zagłębiasz się głębiej, musisz przyjść po tematy, takie jak listy powiązane, kolejki, stosy i drzewa binarne wśród wielu innych struktur danych. W Javie struktury te są częścią ram kolekcji Java. Kolekcja jest niczym innym jak strukturą danych, która odnosi się do grupowania wielu elementów danych i linii kolekcji Java. W rzeczywistości ramy kolekcji zostały zaprojektowane tak, aby osiągnąć kilka celów.
Cała Framework z kolekcji została zaprojektowana wokół zestawu standardowych interfejsów. Kilka standardowych implementacji, takich jak LinkedList, Hashset i Treeset, zapewnia te interfejsy. Ponadto możesz również wdrożyć własną kolekcję, jeśli wybierzesz. Jednak oprócz kolekcji framework definiuje kilka interfejsów i klas map. Java zawiera trzy implementacje map ogólnego przez. Chociaż mapy nie są technicznie kolekcjami, są w pełni zintegrowane z kolekcjami. W rzeczywistości mapy koncentrują się na grupach powiązań między obiektami. W tym artykule podsumowuje kluczowe różnice między hashmapem i hashsetem.
Co to jest hashmap?
Hashmap jest najczęściej używaną implementacją interfejsu mapy, który zapewnia podstawową mapę klucza/wartości, w której elementy nie są uporządkowane. Wykorzystuje specjalną wartość o nazwie kod skrótu, zamiast powolnego wyszukiwania klucza. Kod skrótu jest sposobem na pobranie informacji w danym obiekcie i przekształcenie ich w „stosunkowo unikalny” INT dla tego obiektu. Po prostu działa na zasadzie mieszania, co oznacza, że używa funkcji skrótu do mapowania wartości identyfikacyjnych. Podobnie jak Vector i Stack mają swoje zamienniki w ArrayList i LinkedList, HashTable ma wymianę w hashmapie. Rozszerza AbstractMap, aby zaimplementować interfejs mapy za pomocą wewnętrznej reprezentacji hashta. I podobnie jak inne implementacje ogólne, HashMap obsługuje opcjonalne metody mapy, pozwala na wartości zerowe i nie jest synchronizowane.
Co to jest hashset?
Hashset jest jednym z członków frameworka Java Collections, który implementuje interfejs SET, poparty tabelą skrótów, która w rzeczywistości jest instancją Hashmap. Jak sama nazwa wskazuje, jest ona zaimplementowana przez tabelę skrótów, tablicę, w której elementy są przechowywane w pozycji pochodzącej z ich zawartości. W przeciwieństwie do mapy, zestaw jest dokładnie kolekcją z dokładnie tym samym interfejsem, więc nie ma żadnej dodatkowej funkcjonalności, jak w dwóch różnych listach. Hashset używa funkcji mieszania, która jest zaprojektowana specjalnie do szybkiego wyszukiwania. Jest to nieuporządkowana kolekcja unikalnych obiektów, która nie może przechowywać zduplikowanych wartości. Hashset rozszerza klasę abstrakcyjną, która implementuje SET Interface. Jednak Hashset nie definiuje żadnych dodatkowych metod innych niż te dostarczone przez jego nadklasy i interfejsy.
Różnica między hashmapem a hashsetem
-
Podstawowy
Hashmap jest najczęściej używaną implementacją interfejsu mapy, który zapewnia podstawową mapę klucza/wartości, w której elementy nie są uporządkowane. Po prostu działa na zasadzie mieszania, co oznacza, że używa funkcji skrótu do mapowania wartości identyfikacyjnych. Hashset, z drugiej strony, jest jednym z członków Framework z kolekcji Java, który implementuje interfejs SET, poparty tabelą skrótu, która w rzeczywistości jest instancją Hashmap. Mówiąc po prostu, hashmap implementuje interfejs mapy, podczas gdy Hashset implementuje interfejs SET.
-
Funkcjonalność
Hashset tworzy kolekcję, która wykorzystuje tabelę skrótów do przechowywania. Tabela skrótów przechowuje informacje przy użyciu metody o nazwie mieszanie. Hashset używa funkcji mieszania, która jest specjalnie zaprojektowana do szybkiego wyszukiwania, do przechowywania elementów lub wartości. Większość funkcjonalności skrótu jest dostarczana poprzez abstrakcyjną Kolanie i Streszczenie Superklasy, które Hashset udostępnia Treeset. HashMap rozszerza AbstractMap, aby zaimplementować interfejs MAP za pomocą wewnętrznej reprezentacji hashta. Obie klasy nie są zsynchronizowane, co oznacza, że nie są odpowiednie do operacji bezpiecznych wątków.
-
Duplikat wartości
Ponieważ mapa nie obsługuje zduplikowanych klawiszy, HashMap nie pozwala na zduplikowane klawisze, ale może mieć zduplikowane wartości. Oznacza to, że w HashMap może istnieć zduplikowane wartości, ale możesz użyć kolekcji jako wartości w stosunku do jakiegoś klucza. Każdy klucz musi być unikalny w hashmapie, a pojedynczego klucza nie może mieć większej wartości niż 1. Hashset, z drugiej strony, nie może mieć duplikatów elementów według samej definicji zestawu, co oznacza, że nie można przechowywać zduplikowanych wartości w Hashset. Hashmap zezwala tylko na jeden klawisz zerowy, ale pozwala na dowolną liczbę wartości zerowych, podczas gdy Hashset pozwala tylko na jedną wartość zerową.
-
Mechanizm przechowywania
Hashmap działa na zasadzie mieszania, co oznacza, że używa funkcji skrótu do mapowania wartości identyfikacji wewnętrznej za pomocą algorytmu mieszania, aby umożliwić łatwe pobieranie. Prawdziwy mechanizm mieszania zawsze zwraca ten sam hashcode (), gdy jest stosowany do tego samego obiektu. Hashset, z drugiej strony, wewnętrznie używa hashmap jako struktury danych podkładowych do dodawania lub przechowywania obiektów. Oznacza to, że po utworzeniu obiektu hashsetu utworzy obiekt hashmap.
Hashmap vs. Hashset: wykres porównawczy
Podsumowanie hashmap. Hashset
Chociaż zarówno hashmap, jak i hashset nie są zsynchronizowane, co oznacza, że nie są odpowiednie do operacji bezpiecznych wątków i są zupełnie inne konstrukty, zapewniają stałą wydajność czasu dla podstawowych operacji, takich jak dodanie, usuwanie elementu itp. Podczas gdy HashMap jest ogólną implementacją interfejsu MAP, który przechowuje pary klucza/wartości, Hashset jest implementacją interfejsu Set. Hashset używa hashmapu do poparcia jego implementacji. Hashmap jednak używa zasady mieszania i użyj go do szybkiego polowania na klucz.