what is java hashtable hashtable implementation example
Този урок обяснява какво е Java HashTable, конструктори и методи за клас Hashtable, внедряване и Hashtable срещу Hashmap:
Какво е HashTable?
Hashtable в Java е масив от елементи, които са списъци. Всеки от тези списъци се нарича a кофа .
Той съпоставя ключовете със стойности. В Java хеш таблицата е реализирана от класа ‘HashTable’. Този клас изпълнява интерфейса на картата и наследява класа на речника.
=> Вижте Перфектното ръководство за обучение по Java тук.
Някои от уникалните характеристики на Hashtable в Java са както следва:
- Това е масив, който съдържа списъци или групи като свои елементи.
- Той има уникални елементи.
- В Hashtable няма нулев ключ или нулева стойност.
- Той е подобен на Hashmap, но е синхронизиран.
Какво ще научите:
Клас на HashTable в Java
В Java този клас е член на пакета java.util. По този начин трябва да включим един от следните изявления в нашата програма, за да включим функционалността на класа HashTable.
импортиране на java.util. *;
ИЛИ
импортиране на java.util.HashTable;
Обща декларация за клас за java.util.HashTable е дадена по-долу:
public class Hashtable extends Dictionary implements Map, Cloneable, Serializable
Тук,
- K => тип ключове на HashTable
- V => вид на картографираните стойности
API на класа HashTable се състои от конструктори, които се използват за конструиране на обектите на класа и различните операции или методи, които са част от класа, което води до гладко функциониране на класа HashTable.
Конструктори от клас HashTable
Прототип на конструктора | Описание | |
---|---|---|
Комплект | Комплект | Той връща зададен изглед на съпоставянията, съдържащи се в картата. |
Hashtable () | Конструктор по подразбиране: създава обект от клас HashTable с първоначален капацитет по подразбиране и коефициент на натоварване. | |
Hashtable (вътрешен капацитет) | Създава хеш таблица с посочения първоначален капацитет. | |
Hashtable (вътрешен капацитет, плаващ товар) | Създава обект на хеш таблица с първоначалния капацитет = капацитет и фактор на натоварване = loadFactor. | |
Hashtable (Карта t) | Създава нова hashTable от дадената карта, посочена като аргумент. |
Методи от клас HashTable
Метод | Прототип на метода | Описание |
---|---|---|
ясно | празно ясно () | Изчиства HashTable чрез нулиране на стойностите. |
клон | Клон на обект () | Прави плитко копие на обекта HashTable и го връща. |
изчисли | V изчисление (ключ K, BiFunction remappingFunction) | Изчислява картографиране между дадения ключ и стойността с помощта на функцията за пренасочване. |
computeIfAbsent | V computeIfAbsent (клавиш K, Функция mappingFunction) | Изчислява картографиране между дадения ключ и стойността с помощта на функцията за пренасочване, ако посоченият ключ вече не е свързан с дадената стойност. |
computeIfPresent | V computeIfPresent (ключ K, BiFunction remappingFunction) | Ако даден ключ е налице, функцията за пренасочване се използва за изчисляване на ново съпоставяне между дадения ключ и стойността. |
елементи | Елементи за изброяване () | Той връща изброяване на стойностите в хеш таблицата. |
равно на | булево равно (Обект o) | Сравнява дадения обект с HashTable. |
за всеки | void forEach (действие на BiConsumer) | Даденото действие се изпълнява за всеки от елементите на HashTable, докато всички елементи бъдат изчерпани. |
getOrDefault | V getOrDefault (Object key, V defaultValue) | Той връща стойността, на която е картографиран посоченият ключ или defaultValue, ако картата не съдържа картографиране за ключа. |
хеш код | int hashCode () | Връща хеш кода на HashTable. |
ключове | Клавиши за изброяване () | Връща ключовете в HashTable като изброяване. |
keySet | Set keySet () | Връща набор от клавиши (ключове като комплект) за HashTable. |
отивам | V сливане (K ключ, V стойност, BiFunction remappingFunction) | Картира дадения ключ с ненулевата стойност, използвайки функцията за пренасочване, ако ключът вече не е налице или е нулев. |
слагам | V put (ключ K, стойност V) | Вмъква нова двойка ключ-стойност в HashTable. |
putAll | void putAll (Карта t)) | Поставя или копира двойките ключ-стойност на дадената карта в HashTable. |
putIfAbsent | V putIfAbsent (ключ K, стойност V) | Свързва дадения ключ със стойност null, ако ключът вече не присъства или е свързан с null. |
Премахване | булево премахване (Object key, Object value) | Изтрива дадената двойка ключ-стойност от HashTable. |
замени | V заместване (ключ K, стойност V) | Той замества стойността на дадения ключ с посочената стойност. |
замени | булева замяна (ключ K, V oldValue, V newValue) | Заменя старата стойност на дадения ключ с новата стойност. |
replaceAll | void replaceAll (функция BiFunction) | Всички записи в HashTable се заменят със стойността, получена от оценката на дадената функция. |
toString | String toString () | Преобразува обекта HashTable в неговото низово представяне. |
стойности | Стойности на колекцията () | Връща стойностите в HashTable като колекция. |
съдържа | boolean съдържа (стойност на обекта) | Проверява дали дадената стойност присъства в HashTable. Връща true, ако настоящето else връща false. |
съдържа стойност | boolean containsValue (стойност на обекта) | Проверява дали в HashTable има стойност, равна на дадената стойност, и връща true. |
съдържаКлюч | boolean containsKey (Object key) | Проверява дали има някакъв ключ, равен на дадения ключ в HashTable и връща true, ако да. |
празно е | boolean isEmpty () | Проверява дали дадената HashTable е празна и връща true, ако да. |
преправете | защитено преправяне на празнотата () | Използва се за увеличаване на размера на хеш таблицата и преизчислява всички нейни ключове. |
вземете | V get (Object key) | Извлича стойността за дадения ключ. |
Премахване | V премахване (Object key) | Изтрива дадения ключ и стойност и връща тази стойност. |
размер | размер int () | Връща размера или броя на елементите, присъстващи в HashTable. |
Внедряване на HashTable
По-долу е дадено изпълнението на класа в Java. Тук демонстрирахме всички важни методи, предоставени от класа.
c ++ генерира произволно число между 1 и 10
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); } }
Изход:
Съдържанието на Hashtable:
104: Синьо
103: Кафяво
102: Оранжево
101: Зелено
100: Мрежа
Стойност на Hashtable при 101: Зелено
Стойност на Hashtable при 105: Стойността не е намерена
След премахване (102), таблицата на хеш: {104 = синьо, 103 = кафяво, 101 = зелено, 100 = червено}
Актуализирана хеш-таблица: {104 = синьо, 103 = кафяво, 102 = оранжево, 101 = зелено, 100 = червено}
Пример за HashTable Java
В тази програма дефинираме хеш-таблица с ключовете като имената на титулярите на сметките със съответните им салда по сметки като стойности. Първо извличаме ключовете от HashTable като изброяване. След това, използвайки това изброяване, отпечатваме двойките ключ-стойност от HashTable.
По-късно актуализираме салдото по сметката на един от притежателите и отпечатваме актуализираната сума.
Дадената по-долу програма показва това изпълнение.
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')); } }
Изход:
Таблица на разплащанията по баланса на сметката
КЛЮЧОВА СТОЙНОСТ
Джеймс 78.48
Бен 95.43
Дилън 499.22
Лили 4367.34
Дантелена 1200.0
Новото салдо на сметката на Ben: 1095.43
Hashtable срещу Hashmap
HashTable | HashMap |
---|---|
HashTable се изпълнява бавно. | HashMap е по-бърз. |
Наследява класа на речника. | Наследява клас AbstractMap. |
Е наследствен клас. | Клас HashMap, въведен в JDK 1.2 |
Синхронизирано и безопасно за нишки. | Несинхронизирани и без нишки. |
Той се синхронизира вътрешно и не може да бъде отменен. | Може да се синхронизира с помощта на метода Collections.synchronizedMap. |
Не е разрешен нулев ключ / стойност. | Позволява нулев ключ и множество нулеви стойности. |
Може да се премине с помощта на Enumerator и Iterator. | Може да се премине само с помощта на Iterator. |
често задавани въпроси
В # 1) Какво представлява Hashtable в Java?
Отговор: Това е наследствен клас, който наследява класа „речник“ и съхранява двойки ключ-стойност.
Q # 2) Защо се използва Hashtable?
Отговор: Използва се за съхраняване на двойки ключ-стойност. Така че, когато трябва да съхраним двойките ключ-стойност в табличен формат, отиваме за HashTable. На второ място, той може да съхранява множество стойности за един и същ ключ, като използва кофи. Извличането на данни е ефективно в HashTables.
Q # 3)Как се създава Hashtable в Java?
Отговор: Можете да го създадете, като създадете екземпляр на обект от клас java.util.HashTable.
HashTable hashTable = new HashTable();
Горното изявление създава HashTable с име ‘hashTable’ с ключове и стойности от тип String.
Q # 4) Безопасен ли е Hashtable с нишки?
Отговор: Да, той е безопасен за нишки. В случай, че не се изисква безопасност на нишките, тогава можем да изберем HashMap.
Q # 5) Как Hashtable работи вътрешно в Java с пример?
Отговор: Вътрешно той съхранява двойки ключ-стойност в структура, наречена кофи. Позицията на кофата се определя от hashCode на ключа. Хеш функцията получава местоположението на сегмента, използвайки hashCode на Key.
Заключение
HashTable се състои от данни, съхранявани под формата на двойки ключ-стойност. Ключовете или стойностите не могат да бъдат нула. В Java се реализира с помощта на класа HashTable.
Видяхме конструкторите и методите, предоставени от класа HashTable заедно с внедряването на HashTable на езика Java.
В нашия предстоящ урок ще обсъдим колекцията HashMap.
как тествате уеб услуги
=> Посетете тук за ексклузивната серия уроци за обучение по Java.
Препоръчително четене
- Урок за отражение на Java с примери
- Урок за клас Java Scanner с примери
- Основи на Java: Синтаксис на Java, клас Java и основни концепции на Java
- Какво е Java Vector | Урок за Java Vector Class с примери
- Java SWING Урок: Контейнер, компоненти и обработка на събития
- Java Array Class Tutorial - java.util.Arrays Class с примери
- Урок за JAVA за начинаещи: 100+ практически ръководства за Java видео
- Java String съдържа () урок за методи с примери