hashset java tutorial with programming examples
Ten samouczek wyjaśnia, czym jest HashSet w Javie, metody HashSet, jak go implementować i iterować, a także inne powiązane koncepcje przy pomocy przykładów programowania:
HashSet to kolekcja przechowująca obiekty. HashSet w Javie jest zaimplementowany przy użyciu klasy „HashSet” pakietu java.util.
Ta klasa implementuje zestaw interfejsu. Używa HashTable, który jest instancją HashMap do przechowywania.
=> Zapoznaj się z podręcznikiem Java dla początkujących tutaj.
Czego się nauczysz:
- Java HashSet
- HashSet Vs HashMap
- HashSet Vs TreeSet
- Wniosek
Java HashSet
Poniżej przedstawiono niektóre cechy HashSet:
- Implementuje interfejs Set, który ma HashTable jako strukturę wewnętrzną. Z kolei HashTable jest instancją HashMap.
- Nie zachowuje kolejności elementów. Elementy są przechowywane w losowej kolejności.
- HashSet nie zezwala na zduplikowane wartości.
- Implementuje interfejs Cloneable i Serializable oprócz interfejsu Set.
- W HashSet możemy mieć wartości null.
Hierarchia klas HashSet
Poniżej przedstawiono hierarchię klasy HashSet:
Jak pokazano na powyższym rysunku, klasa HashSet rozszerza klasę AbstractSet, która z kolei implementuje interfejs Set. Interfejs set dziedziczy interfejs Collection, który z kolei rozszerza interfejs Iterable.
Wydanie Java 8 wprowadziło nową metodę „Spliterator” w HashSet, który tworzy szybki rozdzielacz, który wykonuje późne wiązanie na elementach HashSet.
Ogólna deklaracja klasy HashSet to:
public class HashSet rozszerza zestaw implementacji AbstractSet Set,
Klonowalne, serializowalne
Importuj HashSet
Możemy włączyć funkcję HashSet do programu za pomocą instrukcji import, jak pokazano poniżej:
import java.util.HashSet;
lub
import java.util. *;
Zadeklaruj HashSet w Javie
Możemy utworzyć obiekt HashSet w Javie, jak podano poniżej:
HashSet h = new HashSet ();
Klasa HashSet udostępnia następujące konstruktory do tworzenia obiektów.
Prototyp konstruktora | Opis | |
---|---|---|
usunąć | Boolean remove (Object o) | Usuwa dany element o z HashSet, jeśli jest częścią HashSet. |
HashSet () | Domyślny konstruktor dla HashSet | |
HashSet (pojemność int) | Konstruuje obiekt HashSet o podanej „pojemności”. | |
HashSet (int capacity, float loadFactor) | Konstruuje obiekt HashSet o podanej „pojemności” i „loadFactor”. | |
HashSet (kolekcja c) | Skonstruuj obiekt HashSet z podanej kolekcji. |
Jak pokazano w powyższej tabeli, oprócz domyślnego konstruktora, ta klasa udostępnia również konstruktory, które przyjmują pojemność i współczynnik obciążenia oraz inną kolekcję jako argumenty. Możemy tworzyć obiekty tej klasy używając dowolnego z tych konstruktorów.
Zainicjuj HashSet
Poniższy kod Java przedstawia deklarację i inicjalizację obiektu klasy HashSet. W tym programie tworzymy obiekt klasy HashSet z tablicy ArrayList. Początkowo tworzymy i inicjalizujemy ArrayList, a następnie używamy tej ArrayList do tworzenia i inicjalizacji obiektu HashSet.
import java.util.*; class Main{ public static void main(String args[]){ //declare and initialize ArrayList ArrayList<String> myList=new ArrayList<String>(); myList.add('Red'); myList.add('Green'); myList.add('Blue'); //Create a HashSet and provide ArrayList in its constructor HashSet<String> mySet=new HashSet(myList); mySet.add('Yellow'); //print the HashSet System.out.println('The HashSet contents:'); Iterator<String> i=mySet.iterator(); while(i.hasNext()) { System.out.print(i.next() + ' '); } } }
Wynik:
Jak HashSet działa wewnętrznie w Javie?
Wewnętrznie jest implementowany przy użyciu HashTable. HashTable jest instancją HashMap. Ale HashMap to zbiór par klucz-wartość. Jak więc przechowujemy HashSet w HashMap?
Wartości obiektów HashSet są kluczami do HashMap.
Przykład Java HashSet
Zobaczmy szczegółowy przykład HashSet w Javie.
import java.util.*; class Main{ public static void main(String args[]){ //Create a HashSet and add elements to it HashSet<String> mySet=new HashSet<String>(); mySet.add('Blue'); mySet.add('Green'); mySet.add('Blue'); mySet.add('Green'); mySet.add('Red'); mySet.add('Brown'); mySet.add('Yellow'); //Iterate through the HashSet and print its elements System.out.println('HashSet contents:'); Iterator<String> itr=mySet.iterator(); while(itr.hasNext()){ System.out.print(itr.next() + ' '); } } }
Wynik:
Tutaj używamy domyślnego konstruktora do tworzenia obiektu HashSet. Następnie metodą add dodajemy elementy (kolory) do HashSet. Następnie używamy iteratora, aby przejść przez HashSet i wydrukować zawartość.
HashSet Iterator
W Javie HashSet można przechodzić lub iterować na dwa sposoby, jak omówiono poniżej.
Bez korzystania z iteratora
Tutaj nie definiujemy iteratora w HashSet. Zamiast tego używamy pętli forEach. Poniższy program przedstawia przechodzenie przez HashSet przy użyciu pętli forEach.
import java.util.HashSet; import java.util.Set; class Main{ public static void main(String[] args) { // Create a HashSet Set<String> cities_HashSet = new HashSet<String>(); //Initialize HashSet with elements cities_HashSet.add('Mumbai'); cities_HashSet.add('Delhi'); cities_HashSet.add('Pune'); cities_HashSet.add('Chennai'); cities_HashSet.add('Bangaluru'); //use foreach loop to iterate through the HashSet System.out.println('HashSet contents:'); for (String city : cities_HashSet) { System.out.print(city + ' '); } } }
Wynik:
Korzystanie z Iteratora
Kolejnym podejściem do iteracji jest użycie iteratora. Tutaj definiujemy iterator dla klasy HashSet, a następnie przechodzimy przez niego.
Poniższy program przedstawia takie podejście.
import java.util.HashSet; import java.util.Set; import java.util.Iterator; class Main{ public static void main(String[] args) { // Create a HashSet Set<String> cities_HashSet = new HashSet<String>(); //Initialize HashSet with elements cities_HashSet.add('Mumbai'); cities_HashSet.add('Delhi'); cities_HashSet.add('Pune'); cities_HashSet.add('Chennai'); cities_HashSet.add('Bangaluru'); //use iterator to iterate through the HashSet System.out.println('HashSet contents using Iterator:'); Iterator<String> iter = cities_HashSet.iterator(); while(iter.hasNext()){ System.out.print(iter.next() + ' '); } } }
Wynik:
HashSet Methods / API
W poniższej tabeli przedstawiono metody udostępnione przez klasę HashSet. Przygotowaliśmy prototyp i opis dla każdej metody. Jak widać, mamy metody do podstawowych operacji, takich jak dodawanie, usuwanie, rozmiar itp., A także do innych metod sprawdzania zawartości, pustki, iteratora, rozdzielacza itp.
metoda | Prototyp metody | Opis |
---|---|---|
Dodaj | Boolean add (E e) | Dodaje dany element e do HashSet, jeśli jeszcze nie jest obecny. |
jasny | Void clear () | Czyści lub usuwa wszystkie elementy z HashSet |
klon | Klon obiektu () | Służy do zwracania płytkiej kopii tej instancji HashSet: same elementy nie są klonowane. |
zawiera | Boolean zawiera (obiekt o) | Sprawdza, czy HashSet zawiera dany obiekt o i zwraca wartość true, jeśli tak. |
jest pusty | Boolean isEmpty () | Sprawdza, czy zestaw HashSet jest pusty. Zwraca wartość true, jeśli tak. |
iterator | Iterator iterator () | Zwraca iterator używany do przechodzenia przez HashSet. |
rozmiar | Rozmiar int () | Zwraca rozmiar lub liczbę elementów obecnych w HashSet. |
rozdzielacz | Spliterator spliterator () | Zwraca szybki i późno wiążący rozdzielacz, aby przejść przez HashSet. Ta metoda została wprowadzona w Javie 8. |
Opisaliśmy metody dostarczane przez klasę HashSet, teraz zaimplementujmy przykład, który demonstruje główne metody tej klasy.
Poniższy program w języku Java demonstruje metody tej klasy.
import java.util.*; class Main{ public static void main(String args[]){ //create a HashSet and initialize it HashSet<String> colors_set=new HashSet<String>(); colors_set.add('Red'); colors_set.add('Green'); colors_set.add('Blue'); colors_set.add('Cyan'); System.out.println('Initial HashSet: '+colors_set); //remove() method => remove specified element colors_set.remove('Red'); System.out.println('
HashSet after remove(Red): '+colors_set); //declare and initialize another list HashSet<String> colors_hash=new HashSet<String>(); colors_hash.add('Yellow'); colors_hash.add('Magenta'); //addAll() method => add another HashSet to existing colors_set.addAll(colors_hash); System.out.println('
HashSet after add(colors_hash): '+colors_set); //removeAll() method => remove all elements specified in the argument colors_set.removeAll(colors_hash); System.out.println('
HashSet after removeAll(colors_hash) method: '+colors_set); //removeIf() => remove if given condition is fulfilled colors_set.removeIf(str->str.contains('Green')); System.out.println('
HashSet after removeIf(contains(Green)) method: '+colors_set); //clear() => delete all elements from the HashSet colors_set.clear(); System.out.println('
HashSet after clear() method: '+colors_set); } }
Wynik:
Konwertuj HashSet na Array
Możemy użyć metody toArray () z HashSet, aby przekonwertować dany HashSet na tablicę. Zauważ, że typ danych i rozmiar Array powinny być zgodne z HashSet.
Poniższy program Java przedstawia tę konwersję.
import java.util.HashSet; class Main{ public static void main(String[] args) { // Create a HashSet & inintialize it HashSet<String> num_HashSet = new HashSet<String>(); num_HashSet.add('One'); num_HashSet.add('Two'); num_HashSet.add('Three'); num_HashSet.add('Four'); // Print HashSet contents System.out.println('HashSet contents: '+ num_HashSet); // Declare an array with size = HashSet size String[] numArray = new String[num_HashSet.size()]; //use toArray method to convert HashSet to an array num_HashSet.toArray(numArray); // Print Array System.out.println('Array from HashSet: '); for(String val : numArray){ System.out.print(val + ' '); } } }
Wynik:
Sortuj zestaw skrótów
Możemy sortować HashSet w Javie. Elementy HashSet nie są pierwotnie sortowane, ponieważ nie zachowują kolejności elementów. Możemy zastosować dwa podejścia do sortowania HashSet w Javie.
Korzystanie z metody Collections.sort ()
W tym podejściu konwertujemy HashSet na listę. Następnie używamy metody Collections.sort () do sortowania listy. Ta lista jest następnie drukowana.
import java.util.*; public class Main { public static void main(String args[]) { // Create a HashSet & initialize it HashSet<String> cities_HashSet = new HashSet<String>(); cities_HashSet.add('Pune'); cities_HashSet.add('Mumbai'); cities_HashSet.add('Bangaluru'); cities_HashSet.add('Hyderabad'); System.out.println('Original HashSet: ' + cities_HashSet); // Convert HashSet to ArrayList List<String> cities_list = new ArrayList<String>(cities_HashSet); // Use Collections.sort () method to sort the list Collections.sort(cities_list); // Print the Sorted ArrayList (HashSet) System.out.println('Sorted HashSet:'+ cities_list); } }
Wynik:
jak używać sortowania w java
Konwertując HashSet na TreeSet
Korzystając z tego podejścia, konwertujemy HashSet na TreeSet. TreeSet zachowuje kolejność elementów. Stąd, gdy HashSet jest ukryty w TreeSet, elementy są uporządkowane.
Poniższy program w języku Java przedstawia tę konwersję, sortując w ten sposób zestaw HashSet.
import java.util.*; public class Main { public static void main(String args[]) { // Create and initialize a HashSet HashSet<String> cities_HashSet = new HashSet<String>(); cities_HashSet.add('Pune'); cities_HashSet.add('Mumbai'); cities_HashSet.add('Bangaluru'); cities_HashSet.add('Hyderabad'); System.out.println('Original HashSet:'+ cities_HashSet); // Sort HashSet using TreeSet TreeSet<String> treeSet = new TreeSet<String>(cities_HashSet); // Print the sorted HashSet System.out.println('HashSet sorted using using TreeSet:' + treeSet); } }
Wynik:
Omówmy teraz niektóre różnice między HashSet i HashMap. Omówimy również różnice między HashSet i TreeSet.
HashSet Vs HashMap
W poniższej tabeli przedstawiono główne różnice między HashSet i HashMap.
HashSet | HashMap |
---|---|
Obiekty są dodawane za pomocą metody Add (). | HashMap używa metody put () do dodawania par klucz-wartość. |
Implementuje interfejs Set. | Implementuje interfejs Map. |
Przechowuje obiekty określonego typu. | Przechowuj pary klucz-wartość danych. |
Nie zezwala na zduplikowane wartości obiektów. | Zezwala na zduplikowane wartości, ale nie na zduplikowane klucze. |
Może mieć jedną wartość null. | Zezwala na pojedynczy klucz null i wiele wartości null. |
Wewnętrznie używa obiektu HashMap do przechowywania danych. | Używa techniki mieszania do przechowywania danych. |
Jest wolniejszy w porównaniu do HashMap. | HashMap jest szybszy. |
HashSet Vs TreeSet
Poniżej wymieniono różnice między HashSet i TreeSet.
HashSet | TreeSet |
---|---|
Ma ograniczoną funkcjonalność. | Zapewnia funkcje, które oferują różne operacje i ułatwia korzystanie z zestawu drzew niż HashSet. |
Nie zachowuje kolejności elementów. Przechowuje obiekty w losowej kolejności. | Utrzymuje naturalny porządek elementów. |
Pozwala na wartości null. | Nie może mieć wartości null. |
Zapewnia lepszą wydajność, ponieważ podstawowe operacje wymagają stałego czasu. | Oferuje koszt czasu logowania dla podstawowych operacji. |
Znacznie szybszy niż Treeset. | Zestaw drzew jest wolniejszy. |
Wdrożone wewnętrznie przy użyciu HashMap. | Zestaw drzew jest wewnętrznie zaimplementowany przy użyciu mapy drzewa umożliwiającej nawigację. |
Do porównania wykorzystuje metodę equals (). | Używa metody compareTo () do porównania. |
Często Zadawane Pytania
Pytanie 1) Jak działa HashSet w Javie?
Odpowiedź: HashSet w Javie używa HashMap do przechowywania obiektu. Podczas tworzenia obiektu HashSet tworzony jest jeden obiekt HashMap. Elementy lub obiekty wprowadzone w HashSet są przechowywane jako klucze w HashMap.
Pytanie 2) Czy HashSet jest zamawiany w Javie?
Odpowiedź: Nie, nie jest uporządkowany w Javie. Przechowuje elementy w losowej kolejności.
Pytanie 3) Czy HashSet dopuszcza wartość null?
Odpowiedź: tak, zezwala na pojedynczą wartość null. Oznacza to, że tylko pojedynczy element lub obiekt może mieć wartość NULL, a nie wszystkie.
P # 4) Dlaczego HashSet jest używany w Javie?
Odpowiedź: Służy do przechowywania par klucz-wartość w Javie. Jest podobny do HashTable z tym wyjątkiem, że HashSet jest niezsynchronizowany iw przeciwieństwie do HashTable dopuszcza wartości null i pojedynczy klucz o wartości null. HashSet nie jest uporządkowany i może być używany do przechowywania nieuporządkowanych obiektów lub gdy kolejność obiektów nie jest wymagana.
Pytanie 5) Czy HashSet jest synchronizowany w Javie?
Odpowiedź: HashSet nie jest synchronizowany w Javie. Ponadto nie jest bezpieczny dla wątków. Ale możemy zsynchronizować go za pomocą metody synchronizedSet ().
Wniosek
HashSet to kolekcja zawierająca obiekty w losowej kolejności. Klasa HashSet, która implementuje HashSet w Javie wewnętrznie używa HashTable, który implementuje HashMap.
Zobaczyliśmy deklarację i inicjalizację HashSet wraz z metodami dostarczonymi przez klasę HashSet.
=> Przeczytaj serię szkoleń Easy Java.
rekomendowane lektury
- Java Double - samouczek z przykładami programowania
- Samouczek Java Float z przykładami programowania
- Java Reverse String: samouczek z przykładami programowania
- TreeSet w Javie: samouczek z przykładami programowania
- Samouczek JAVA dla początkujących: ponad 100 praktycznych samouczków wideo Java
- Java String zawiera () Samouczek dotyczący metody z przykładami
- TreeMap w Javie - samouczek z przykładami TreeMap w języku Java
- Postrzępiona tablica w Javie - samouczek z przykładami