Разлика између ХасхМап-а и Хасхтабле-а у Јави

Аутор: Laura McKinney
Датум Стварања: 2 Април 2021
Ажурирати Датум: 5 Може 2024
Anonim
Section, Week 5
Видео: Section, Week 5

Садржај


Оба ХасхМап и Хасхтабле користе се за представљање а група објеката који су представљени у пар. Свака пар се зове Улаз објекта. Тхе колекција уноса се односи на објекте ХасхМап и Хасхтабле. Кључеви у колекцији морају бити јединствени или препознатљиви. Разлика између ХасхМап-а и Хасхтабле-а је у томе ХасхМап посебно имплементира Мап интерфејс док, Хасхтабле проширује класу Дицтионари (наслеђена класа) која је ре-инжињерирана за имплементацију Мап интерфејса. Друга битна разлика је да су објекти ХасхМап-а несинхронизовано док су предмети Хасхтабле-а синхронизовано.

Погледајмо упоредни графикон приказан доле да бисмо сазнали још неке разлике између ХасхМап-а и Хасхтабле-а.

  1. Упоредни графикон
  2. Дефиниција
  3. Кључне разлике
  4. Сличности
  5. Закључак

Упоредни графикон

Основе за упоређивањеХасхМапХасхтабле
Имплементација / продужавањеХасхМап класа имплементира Мап интерфејс и проширује класу АбстрацтМап.Хасхтабле проширује Цласс Легаци класу, али, он је редизајниран и сада такође имплементира Мап интерфејс.
СинхронизацијаХасхМап је несинхронизован, па према томе, ХасхМап објект није безбедан са навојем.Хасхтабле је синхронизован, и самим тим је предмет Хасхтабле безбедан на нитима.
Кључеви / вредностКључ може вратити Нулл само једном, али вредност може вратити Нулл било који број времена.Кључ не може вратити Нулл јер се користи за добијање хасх кода који ће се користити као индекс хасх табеле, нити вредност може вратити Нулл.
Подразумевани почетни капацитетЗадани почетни капацитет ХасхМап-а је 16.Почетни почетни капацитет Хасхтабле-а је 11.
ПутовањеИтератор прелази ХасхМап.Као и класа мапе, Хасхтабле такође директно не подржава Итератор за путовање, па користи Енумератор.


Дефиниција ХасхМап-а

ХасхМап је класа која имплементира Мапа интерфејс и проширује АбстрацтМап класа користи хасх табелу. Објект ХасхМап односи се на колекцију / скуп пар у којем се сваки кључ пресликава на одређену вредност. Кључеви у колекцији морају бити јединствени јер се користе за проналажење вредности. С друге стране, вредности у збирци се могу дуплирати. Декларација о ХасхМап класи и конструкторима ХасхМапцласс-а је следећа:

/ * К представља кључ, а В представља вредност * / класе ХасхМап / * Конструктори класе ХасхМап * / ХасхМап () ХасхМап (Мап <? Проширује К,? Проширује В> м) ХасхМап (инт капацитет) ХасхМап (инт капацитет, флоат филлРатио)

Први конструктор је задани конструктор који иницијализира празан објект ХасхМап-а са заданим капацитетом 16 и заданим односом испуњавања 0,75. Други конструктор иницијализира хасх мапу са вриједношћу м. Трећи конструктор креира хасх мапу са почетним капацитетом који одговара вредности датој у аргументу "капацитет". Четврти конструктор иницијализира хасх мапу са капацитетом и омјером испуњавања наведеним у параметрима. дознајмо сада како да унесемо уносе у хасх мапу.


Хасхмап хм = нови Хасхмап (); хм.пут ("Ајаи", 275); хм.пут ("Вијаи", 250); хм.пут ("Јонни", 150); хм.пут ("Јордан", 200); Систем.оут.лн (хм); / * излаз * / {Вијаи = 250, Јонни = 150, Ајаи = 275, Јордан = 200}

У горњем коду можете видети да сам створио празан ХасхМап објект хм са подразумеваним почетним капацитетом и заданим односом пуњења. Затим сам убацио четири уноса у хасх мапу помоћу методе пут (К, В) која кључ пресликава на вредност. Можете приметити да уноси нису уређени у редоследу којим их храните јер редослед уметања није фиксиран. Сада размислите о случају за који већ имате унос у хасх мапу и након тога покушавате уметнути пут (К1, В5), тј. покушавате пресликати исти кључ с различитом вриједношћу. Тада ће метода пут заменити стару вредност В1 новом вредношћу В2 и вратити стару вредност В1, у супротном, ако никада не покушамо заменити вредност кључа, онда пут метода враћа Нулл за тај кључ.

Дефиниција Хасхтабле-а

Хасхтабле је класа која проширује Речник класа која је наслеђена класа и реинжењерирана је за имплементацију Мапа интерфејс. Хасхтабле користи хасх табелу као своју структуру података. Хасхтабле је сличан ХасхМап-у, јер се овде такође Хасхтабле предмет односи на збирку уноса где је сваки унос пар . Сви кључеви у збирци морају бити јединствени с друге стране, вредности се могу дуплирати. Тастери се посебно користе за добијање вредности хасх кода која одређује индекс, где је пар ће бити смештен у табели хасх-а. У хасх табели ни кључ ни вредност не могу вратити Нулл поинтер. Погледајмо декларацију класе Хасхтабле и конструкторе класе хасхтабле.

/ * К одређује кључ, а В одређује вредност која је повезана са кључем * / класе Хасхтабле / * конструктори Хасхтабле * / Хасхтабле () Хасхтабле (инт сизе) Хасхтабле (инт сизе, флоат филлРатио) Хасхтабле (Мап <? ектендс К,? ектендс В> м)

У горњем коду, први конструктор је задани конструктор који ствара празан објект класе Хасхтабле, његова задата величина је 11, а задани омјер испуњавања 0,75. Други конструктор креира таблицу хасх-а са величином која одговара вредности датој у параметру "сизе". Трећи конструктор ствара хасх табелу са величином и омјером испуњавања наведеним у параметру. Четврти конструктор иницијализира хасх таблицу са вриједношћу м. Дознајмо сада како да убацимо упарите у табели хасх-а.

Хасхтабле хт = нови Хасхтабле (); хт.пут (нови хасхЦоде (2), 275); хт.пут (нови хасхЦоде (12), 250); хт.пут (нови хасхЦоде (16), 150); хт.пут (нови хасхЦоде (8), 200); Систем.оут.лн (хт); / * излаз * / {12 = 250, 16 = 150,2и = 275, 8 = 200}

У горњем коду створио сам празан објект Хасхтабле-а и убацио четири уноса помоћу методе пут (). Унутар пут методе назвао сам хасхЦоде () који израчунава и враћа вриједност хасх кода која ће дјеловати као вриједност индекса за објект уноса. Као што видите, нисам споменуо величину хасх табеле, па ће према заданим поставкама бити 11. Овде такође, редослед уметања није сачуван и, према томе, када се уноси ед нису појављивали у редоследу када су унети.

  1. ХасхМап имплементира Мапа интерфејс и проширује апстрактну класу, АбстрацтМап док Хасхтабле проширује апстрактну класу Речник, која је такође Легаци класа, касније реновирана за имплементацију Мапа интерфејс.
  2. Објект ХасхМап је несинхронизовано тј. више нити може истовремено радити на њему, па стога и објекти нису сигурни. С друге стране, предмети су Хасхтабле-а синхронизовано тј. ако нит жели радити на објекту Хасхтабле, он мора стећи браву на том објекту, тако да ниједна друга нит не би могла приступити том објекту, и стога је сигурна.
  3. У ХасхМап кључу се може вратити Ништа само једном, а вредност се може вратити Поништавање више пута. Са друге стране, кључ никада не може вратити Нулл као некада за добијање вредности хасх кода који се користи као индекс за складиштење пар и ни вриједност могу вратити Нулл.
  4. Задани капацитет хасх табеле у ХасхМап класи је 16 будући да је задани капацитет хасх табеле у Хасхтабле-у 11.
  5. Тхе Итератор може прећи уносе Хасхмапа. Са друге стране, Хасхтабле директно не подржава итератора, а тиме и уопште Пописивач користи се за прелиставање уноса у Хасхтабле-у.

Сличности:

  • Оба ХасхМап и Хасхтабле користе структуру података хасх табле.
  • ХасхМап и Хасхтабле оба примена Мапа интерфејс
  • Редослед уношења није сачуван у ХасхМап-у и Хасхтабле-у и на основу хасх кода добијеног помоћу кључева.
  • У ХасхМап-у и Хасхтабле-у морају бити кључеви јединствен док вредности могу бити дуплирано.
  • ХасхМап и Хасхтабле могу садржати хетерогени предмети и за кључеве и за вредности.
  • ХасхМап и Хасхтабле, оба примена Сериализабле и Цлонеабле интерфејси али не, случајни приступ.
  • Оба ХасхМап и Хасхтабле имају задани омјер испуњавања 0.75.
  • Оба ХасхМап-а и Хасхтабле-а су најбољи за проналажење или у потрази операције.

Закључак:

ХасхМап је бољи у перформансама јер су његови објекти несинхронизовани и на њему могу радити више нити истовремено, па је и бржи од Хасхтабле-а.