Разлика между HashMap и Hashtable в Java

Автор: Laura McKinney
Дата На Създаване: 2 Април 2021
Дата На Актуализиране: 4 Може 2024
Anonim
Карты отображений в Java. HashTable, TreeMap, HashMap. Java Professional. Урок 3
Видео: Карты отображений в Java. HashTable, TreeMap, HashMap. Java Professional. Урок 3

Съдържание


И двете HashMap и Hashtable се използват за представяне на a група от обекти които са представени в двойка. всеки двойка се нарича влизане обект. Най- колекция of Entries се препраща от обекта на HashMap и Hashtable. Ключовете в колекция трябва да бъдат уникални или отличителни. Разликата между HashMap и Hashtable е тази HashMap по-специално реализира интерфейса на Map, докато, Hashtable разширява класа на речника (наследен клас), който е реинженериран за внедряване на интерфейс на карта. Другата важна разлика е, че обектите на HashMap са несинхронизирано като има предвид, че обектите на Hashtable са синхронизирано.

Нека разгледаме таблицата за сравнение, показана по-долу, за да научим още няколко разлики между HashMap и Hashtable.

  1. Сравнителна диаграма
  2. дефиниция
  3. Ключови разлики
  4. прилики
  5. заключение

Сравнителна диаграма

Основа за сравнениеHashMapHashtable
Изпълнение / удължаванеКласът HashMap реализира Map интерфейс и разширява клас AbstractMap.Hashtable разширява класа на речник Legacy, но, той е реконструиран и сега също така прилага интерфейс Map.
синхронизацияHashMap не е синхронизиран и следователно обектът HashMap не е защитен с резба.Hashtable е синхронизиран и следователно обектът на Hashtable е защитен с конци.
Ключове / ValueКлючът може да върне Null само веднъж, но стойността може да върне Null произволно време.Ключът не може да върне Null, тъй като се използва за получаване на хеш код, който ще се използва като индекс на хеш таблицата, нито стойността може да върне Null.
Начална капацитет по подразбиранеПървоначалният първоначален капацитет на HashMap е 16.Първоначалният първоначален капацитет на Hashtable е 11.
преминаващиHashMap се преминава от Iterator.Подобно на клас клас Hashtable също не поддържа директно Iterator за преминаване и следователно, той използва Enumerator.


Определение на HashMap

HashMap е клас, който реализира карта интерфейс и разширява AbstractMap клас използва хеш таблицата. Обектът на HashMap се отнася до колекция / набор от чифт, където всеки ключ е картографиран към определена стойност. Клавишите в колекция трябва да бъдат уникални, тъй като се използват за извличане на стойността. От друга страна, стойностите в колекция могат да се дублират. Декларацията за клас HashMap и конструкторите на HashMapclass са както следва:

/ * K представлява ключ, а V представлява стойност * / клас HashMap / * Конструктори от клас HashMap * / HashMap () HashMap (Map <? Разширява K,? Разширява V> m) HashMap (int капацитет) HashMap (int капацитет, поплавък fillRatio)

Първият конструктор е конструктор по подразбиране, който инициализира празен обект на HashMap с капацитет по подразбиране 16 и съотношение попълване по подразбиране 0,75. Вторият конструктор инициализира хеш картата със стойността на m. Третият конструктор създава хеш карта с първоначалния капацитет, съответстващ на стойността, предоставена в аргумента "капацитет". Четвъртият конструктор инициализира хеш картата с капацитет и съотношение на запълване, предоставени в параметрите. нека сега научим как да захранваме записите в хеш карта.


Hashmap hm = нов Hashmap (); hm.put ("Аджай", 275); hm.put ("Vijay", 250); hm.put ("Джони", 150); hm.put ("Йордания", 200); System.out.ln (hm); / * изход * / {Vijay = 250, Джони = 150, Аджай = 275, Йордания = 200}

В горния код можете да видите, че създадох празен HashMap обект хм с първоначален първоначален капацитет и съотношение попълване по подразбиране След това вмъкнах четири записа в хеш картата, използвайки метода put (K, V), който картографира ключа към стойността. Можете да забележите, че записите не са редактирани в последователност, в която ги захранвате, защото редът на въвеждане не е фиксиран. Сега, помислете за случай, в който вече имате запис в хеш картата и след това се опитвате да вмъкнете пут (K1, V5), т.е. се опитвате да картографирате същия ключ с различна стойност. Тогава методът put ще замени старата стойност V1 с новата стойност V2 и ще върне старата стойност V1, в противен случай, ако никога не се опитаме да заменим стойността на ключ, тогава методът връща Null за този ключ.

Определение на Hashtable

Hashtable е клас, който разширява Речник клас, който е наследствен клас и е реинженериран за внедряване на карта интерфейс. Hashtable използва хеш таблицата като своя структура от данни. Hashtable е подобен на HashMap, тъй като тук също обектът на Hashtable се отнася до колекцията от записи, където всеки запис е двойка , Всички ключове в колекция трябва да бъдат уникални от друга страна, стойностите могат да се дублират. Ключовете са особено използвани за получаване на стойност на хеш код, който определя индекса, където чифт ще се съхранява в хеш таблица. В хеш таблицата нито ключ, нито стойност не могат да върнат Null указател. Нека видим декларацията за клас Hashtable и конструкторите на клас хешбъл.

/ * K указва ключа, а V определя стойността, свързана с ключа * / клас Hashtable / * конструктори на Hashtable * / Hashtable () Hashtable (int size) Hashtable (int size, float fillRatio) Hashtable (Map <? extends K,? extends V> m)

В горния код първият конструктор е конструктор по подразбиране, който създава празен обект от клас Hashtable, неговият размер по подразбиране е 11, а коефициентът на запълване по подразбиране е 0,75. Вторият конструктор създава хеш таблица с размер, съответстващ на стойността, предоставена в параметъра „размер“. Третият конструктор създава хеш таблица с размер и съотношение на запълване, предоставени в параметъра. Четвъртият конструктор инициализира хеш таблицата със стойността m. Нека сега научим как да поставим чифт в хеш таблицата.

Hashtable ht = нов Hashtable (); ht.put (нов hashCode (2), 275); ht.put (нов hashCode (12), 250); ht.put (нов hashCode (16), 150); ht.put (нов hashCode (8), 200); System.out.ln (ht); / * изход * / {12 = 250, 16 = 150,2y = 275, 8 = 200}

В горния код създадох празен обект на Hashtable и вмъкнах четири записа, използвайки метода put (). Вътре поставен метод нарекох hashCode (), който изчислява и връща стойността на хеш кода, която ще действа като стойност на индекса за обект на въвеждане. Както можете да видите, не споменах размера на хеш таблицата, така че по подразбиране той ще бъде 11. Тук също редът на вмъкване не се запазва и следователно, когато редакционните записи не се появяват в последователност, в която са били подадени.

  1. HashMap реализира карта интерфейс и разширява абстрактен клас, AbstractMap като има предвид, че Hashtable разширява класа на абстрактните Речник, който също е клас на Legacy, по-късно реинженериран за внедряване карта интерфейс.
  2. Обектът HashMap е несинхронизирано т.е. няколко нишки могат да работят върху него по едно и също време и следователно, той не обезопасява конци. От друга страна, обектите на Hashtable са синхронизирано т.е., ако една нишка иска да работи върху обект на Hashtable, тя трябва да придобие заключване на този обект, така че никоя друга нишка да не може да получи достъп до този обект и следователно, той е безопасен с нишка.
  3. В HashMap ключът може да се върне Нищо само веднъжи стойността може да се върне Недействайте многократно, От друга страна, ключът никога не може да върне Null, както е използван за получаване на стойност на хеш код, който се използва като индекс за съхраняване на чифт и нито стойност може да върне Null.
  4. Капацитетът по подразбиране на хеш таблицата в клас HashMap е 16 като има предвид, че капацитетът по подразбиране на хеш таблицата в Hashtable е 11.
  5. Най- Итераторът може да обикаля Hashmap записи. От друга страна, Hashtable не поддържа пряко Iterator и следователно като цяло Enumerator се използва за преминаване на записите в Hashtable.

прилики:

  • И HashMap и Hashtable използват структурата на данните на хеш маса.
  • HashMap и Hashtable и двата инструмента карта интерфейс
  • Редът за въвеждане не е запазен както в HashMap, така и в Hashtable и на базата на хеш код, получен с помощта на ключове.
  • В HashMap и Hashtable ключовете трябва да бъдат единствен по рода си като има предвид, че стойностите могат да бъдат дублирания.
  • И двете HashMap и Hashtable могат да съдържат разнородни обекти както за ключовете, така и за стойностите.
  • HashMap и Hashtable, и двете приложения Serializable и Cloneable интерфейси, но не, случаен достъп.
  • И двете HashMap и Hashtable имат съотношение попълване по подразбиране 0.75.
  • И HashMap и Hashtable са най-добри за извличане или търсене операции.

Заключение:

HashMap е по-добър в изпълнение, тъй като обектите му са несинхронизирани и множество нишки могат да работят върху него едновременно и следователно е по-бърз от Hashtable.