what is java hashtable hashtable implementation example
Ten samouczek wyjaśnia, czym jest Java HashTable, konstruktory i metody klasy Hashtable, implementacja i Hashtable a Hashmap:
Co to jest HashTable?
Hashtable w Javie to tablica elementów, które są listami. Każda z tych list jest określana jako wiadro .
Mapuje klucze do wartości. W Javie tablica skrótów jest implementowana przez klasę „HashTable”. Ta klasa implementuje interfejs mapy i dziedziczy klasę słownika.
=> Sprawdź idealny przewodnik szkoleniowy języka Java tutaj.
Niektóre z unikalnych cech Hashtable w Javie są następujące:
- Jest to tablica zawierająca listy lub zasobniki jako jej elementy.
- Posiada unikalne elementy.
- W tablicy Hashtable nie ma klucza ani wartości null.
- Jest podobny do Hashmap, ale jest zsynchronizowany.
Czego się nauczysz:
Klasa HashTable w Javie
W Javie ta klasa jest członkiem pakietu java.util. Dlatego musimy dołączyć do naszego programu jedną z poniższych instrukcji, aby uwzględnić funkcjonalność klasy HashTable.
import java.util. *;
LUB
import java.util.HashTable;
Poniżej podano ogólną deklarację klasy java.util.HashTable:
public class Hashtable extends Dictionary implements Map, Cloneable, Serializable
Tutaj,
- K => typ kluczy tablicy HashTable
- V => typ mapowanych wartości
Interfejs API klasy HashTable składa się z konstruktorów służących do konstruowania obiektów klas oraz różnych operacji lub metod, które są częścią klasy, co zapewnia płynne działanie klasy HashTable.
Konstruktorzy klasy HashTable
Prototyp konstruktora | Opis | |
---|---|---|
Zestaw | Zestaw | Zwraca zestaw widoków mapowań zawartych w mapie. |
Hashtable () | Konstruktor domyślny: tworzy obiekt klasy HashTable z początkową domyślną pojemnością i współczynnikiem obciążenia. | |
Hashtable (int capacity) | Tworzy tabelę skrótów o określonej pojemności początkowej. | |
Hashtable (int capacity, float loadFactor) | Tworzy obiekt tablicy skrótów z początkową pojemnością = pojemnością i współczynnikiem obciążenia = loadFactor. | |
Hashtable (Mapa t) | Tworzy nową tabelę hashTable z podanej mapy określonej jako argument. |
Metody klasy HashTable
metoda | Prototyp metody | Opis |
---|---|---|
jasny | void clear () | Czyści HashTable, resetując wartości. |
klon | Klon obiektu () | Tworzy płytką kopię obiektu HashTable i zwraca go. |
obliczać | V obliczenie (klawisz K, funkcja ponownego odwzorowania funkcji BiFunction) | Oblicza mapowanie między podanym kluczem a wartością przy użyciu funkcji remapowania. |
computeIfAbsent | V computeIfAbsent (klawisz K, funkcja mapowania funkcji) | Oblicza mapowanie między danym kluczem a wartością przy użyciu funkcji remapowania, jeśli określony klucz nie jest już skojarzony z podaną wartością. |
computeIfPresent | V computeIfPresent (klawisz K, funkcja remappingu BiFunction) | Jeśli podany klucz jest obecny, funkcja remapowania jest używana do obliczenia nowego mapowania między podanym kluczem a wartością. |
elementy | Elementy wyliczenia () | Zwraca wyliczenie wartości w tablicy skrótów. |
równa się | boolean równa się (Object o) | Porównuje dany obiekt z HashTable. |
dla każdego | void forEach (akcja BiConsumer) | Podana akcja jest wykonywana dla każdego elementu HashTable, aż do wyczerpania wszystkich elementów. |
getOrDefault | V getOrDefault (klucz obiektu, V defaultValue) | Zwraca wartość, na którą mapowany jest określony klucz lub defaultValue, jeśli mapa nie zawiera mapowania dla klucza. |
hashCode | int hashCode () | Zwraca kod skrótu HashTable. |
Klucze | Klucze wyliczenia () | Zwraca klucze w HashTable jako wyliczenie. |
zestaw kluczy | Ustaw keySet () | Zwraca zestaw kluczy (klucze jako zestaw) dla HashTable. |
iść | Scalanie V (klawisz K, wartość V, funkcja remapowania BiFunction) | Mapuje podany klucz z wartością inną niż null przy użyciu funkcji remapping, jeśli klucz nie jest jeszcze obecny lub null. |
położyć | V put (klawisz K, wartość V) | Wstawia nową parę klucz-wartość w HashTable. |
połóż wszystko | void putAll (Mapa t)) | Wstawia lub kopiuje pary klucz-wartość danej mapy do HashTable. |
putIfAbsent | V putIfAbsent (klawisz K, wartość V) | Kojarzy dany klucz z wartością null, jeśli klucz nie jest już obecny lub skojarzony z null. |
usunąć | usunięcie logiczne (klucz obiektu, wartość obiektu) | Usuwa daną parę klucz-wartość z HashTable. |
zastąpić | Zastąp V (klawisz K, wartość V) | Zastępuje wartość podanego klucza określoną wartością. |
zastąpić | boolean replace (klawisz K, V oldValue, V newValue) | Zastępuje starą wartość danego klucza nową wartością. |
Zamień wszystko | void replaceAll (funkcja BiFunction) | Wszystkie wpisy w HashTable są zastępowane przez wartość uzyskaną z oceny danej funkcji. |
toString | Ciąg toString () | Konwertuje obiekt HashTable na jego reprezentację w postaci ciągu. |
wartości | Wartości kolekcji () | Zwraca wartości w HashTable jako kolekcję. |
zawiera | boolean zawiera (wartość obiektu) | Sprawdza, czy podana wartość jest obecna w HashTable. Zwraca wartość true, jeśli jest obecna else zwraca false. |
zawiera wartość | boolean zawieraValue (wartość obiektu) | Sprawdza, czy istnieje wartość równa podanej wartości w HashTable i zwraca wartość true. |
zawieraKlucz | boolean containsKey (klucz obiektu) | Sprawdza, czy istnieje klucz równy podanemu kluczowi w HashTable i zwraca wartość true, jeśli tak. |
jest pusty | boolean isEmpty () | Sprawdza, czy podana tabela HashTable jest pusta i zwraca wartość true, jeśli tak. |
rehash | protected void rehash () | Służy do zwiększania rozmiaru tablicy skrótów i ponownego haszowania wszystkich jej kluczy. |
otrzymać | V get (klucz obiektu) | Pobiera wartość dla danego klucza. |
usunąć | V usuń (klucz obiektu) | Usuwa podany klucz i wartość i zwraca tę wartość. |
rozmiar | rozmiar int () | Zwraca rozmiar lub liczbę elementów obecnych w HashTable. |
Implementacja HashTable
Poniżej podano implementację tej klasy w Javie. Tutaj zademonstrowaliśmy wszystkie ważne metody dostarczane przez klasę.
która warstwa modelu OSI jest używana do takich rzeczy jak sygnały, bity, kable i złącza?
import java.util.*; class Main{ public static void main(String args()){ //create a Hashtable and initiliaze it Hashtable hash_tab=new Hashtable (); hash_tab.put(100,'Red'); hash_tab.put(101,'Green'); hash_tab.put(104,'Blue'); hash_tab.put(102,'Orange'); hash_tab.put(103,'Brown'); //obtain entrySet for the Hashtable and print the elments System.out.println('The contents of Hashtable:'); for(Map.Entry m:hash_tab.entrySet()){ System.out.println(m.getKey()+' : '+m.getValue()); } //getOrDefault operation => get the value at given key or output default message System.out.println('Hashtable Value at 101: ' + hash_tab.getOrDefault(101, 'Value Not Found')); System.out.println('Hashtable Value at 105: ' +hash_tab.getOrDefault(105, 'Value Not Found')); //remove operation => delete value at given key hash_tab.remove(102); System.out.println('After remove(102), the Hash Table: '+ hash_tab); //putIfAbsent operation=>update the key-value pair in table if absent hash_tab.putIfAbsent(102,'Orange'); System.out.println('Updated Hash Table: '+hash_tab); } }
Wynik:
Zawartość Hashtable:
104: niebieski
103: brązowy
102: pomarańczowy
101: zielony
100: Sieć
Wartość Hashtable przy 101: zielony
Hashtable wartość na 105: nie znaleziono wartości
Po usunięciu (102), tabela z skrótami: {104 = niebieski, 103 = brązowy, 101 = zielony, 100 = czerwony}
Zaktualizowana tabela skrótów: {104 = niebieski, 103 = brązowy, 102 = pomarańczowy, 101 = zielony, 100 = czerwony}
Przykład HashTable Java
W tym programie definiujemy tablicę haszującą z kluczami, których nazwy posiadają właściciele kont, a ich salda są wartościami. Najpierw pobieramy klucze z HashTable jako wyliczenie. Następnie przy użyciu tego wyliczenia drukujemy pary klucz-wartość z tablicy HashTable.
Później aktualizujemy saldo konta jednego z posiadaczy i drukujemy zaktualizowaną kwotę.
Przedstawiony poniżej program przedstawia tę realizację.
import java.util.*; public class Main { public static void main(String args()) { // Create a Hashtable of account balance Hashtable acc_balance = new Hashtable(); Enumeration person_names; String name_str; double balance; //initialize the Hashtable acc_balance.put('Lily', new Double(4367.34)); acc_balance.put('Ben', new Double(95.43)); acc_balance.put('Lacy', new Double(1200.00)); acc_balance.put('Dillon', new Double(499.22)); acc_balance.put('James', new Double(78.48)); // retrieve the keys of the Hashtable person_names = acc_balance.keys(); System.out.println('The account balance Hashtable:'); System.out.println(' KEY VALUE '); //print the contents of Hashtable while(person_names.hasMoreElements()) { name_str = (String) person_names.nextElement(); System.out.println(' ' + name_str + ' ' + acc_balance.get(name_str)); } System.out.println(); // Update Ben's Account by adding 1000 to it. balance = ((Double)acc_balance.get('Ben')).doubleValue(); acc_balance.put('Ben', new Double(balance + 1000)); //print the contents of updated account System.out.println('Ben's new Account balance: ' + acc_balance.get('Ben')); } }
Wynik:
Saldo konta Hashtable:
KLUCZOWA WARTOŚĆ
James 78,48
Ben 95.43
Dillon 499.22
Lily 4367.34
Koronkowy 1200.0
Saldo nowego konta Bena: 1095,43
Hashtable Vs Hashmap
HashTable | HashMap |
---|---|
HashTable działa wolno. | HashMap jest szybszy. |
Dziedziczy klasę słownika. | Dziedziczy klasę AbstractMap. |
Jest klasą starszą. | Klasa HashMap wprowadzona w JDK 1.2 |
Zsynchronizowane i bezpieczne wątkowo. | Niezsynchronizowane i niegwintowane bezpieczne. |
Jest zsynchronizowany wewnętrznie i nie można go cofnąć. | Można go zsynchronizować za pomocą metody Collections.synchronizedMap. |
Brak dozwolonych kluczy / wartości o wartości NULL. | Zezwala na klucz null i wiele wartości null. |
Można przejść za pomocą modułu Enumerator i Iterator. | Można przejść tylko za pomocą Iteratora. |
Często Zadawane Pytania
Pytanie 1) Co to jest Hashtable w Javie?
Odpowiedź: Jest to starsza klasa, która dziedziczy klasę „słownika” i przechowuje pary klucz-wartość.
Pytanie nr 2) Dlaczego jest używany Hashtable?
Odpowiedź: Służy do przechowywania par klucz-wartość. Kiedy więc musimy przechowywać pary klucz-wartość w formacie tabelarycznym, wybieramy HashTable. Po drugie, może przechowywać wiele wartości dla tego samego klucza przy użyciu zasobników. Pobieranie danych jest wydajne w HashTables.
Pytanie nr 3)Jak utworzyć tabelę z haszowaniem w Javie?
Odpowiedź: Możesz go utworzyć, tworząc instancję obiektu klasy java.util.HashTable.
HashTable hashTable = new HashTable();
Powyższa instrukcja tworzy HashTable o nazwie „hashTable” z kluczami i wartościami typu String.
Pytanie 4) Czy funkcja Hashtable jest bezpieczna dla wątków?
Odpowiedź: Tak, jest bezpieczny dla wątków. W przypadku, gdy bezpieczeństwo wątków nie jest wymagane, możemy wybrać HashMap.
Pytanie nr 5) Jak Hashtable działa wewnętrznie w Javie na przykładzie?
Odpowiedź: Wewnętrznie przechowuje pary klucz-wartość w strukturze zwanej zasobnikami. Pozycja zasobnika jest określana przez hashCode klucza. Funkcja skrótu pobiera lokalizację zasobnika za pomocą hashCode klucza.
Wniosek
HashTable składa się z danych przechowywanych w postaci par klucz-wartość. Klucze lub wartości nie mogą mieć wartości null. W Javie jest zaimplementowany za pomocą klasy HashTable.
Widzieliśmy konstruktory i metody dostarczane przez klasę HashTable wraz z implementacją HashTable w języku Java.
jak otworzyć plik .bin
W naszym nadchodzącym samouczku omówimy kolekcję HashMap.
=> Odwiedź tutaj ekskluzywną serię samouczków szkoleniowych Java.
rekomendowane lektury
- Samouczek dotyczący refleksji w języku Java z przykładami
- Samouczek klasy skanera Java z przykładami
- Podstawy języka Java: składnia języka Java, klasa języka Java i podstawowe pojęcia dotyczące języka Java
- Co to jest wektor Java | Samouczek klasy wektorowej Java z przykładami
- Samouczek Java SWING: kontener, komponenty i obsługa zdarzeń
- Java Array Class Tutorial - klasa java.util.Arrays z przykładami
- Samouczek JAVA dla początkujących: ponad 100 praktycznych samouczków wideo Java
- Java String zawiera () Samouczek dotyczący metody z przykładami