Рамката на Java Collections предоставя набор от класове за събиране. Всеки клас има своите силни и слаби страни в изпълнението. Някои от класовете предоставят пълни реализации, които могат да се използват такива, каквито са. Други са абстрактни, които предоставят скелетни реализации, които се използват като отправна точка за създаване на колекции. Реализациите на колекцията използват рамката за синхронизирана обвивка, за да предоставят синхронизирани класове, в противен случай реализациите са несинхронизирани. Няколко класа предоставят реализации на интерфейса на картата.

Платформата Java съдържа три реализации на карта с общо предназначение: HashMap, TreeMap и LinkedHashMap. HashMap и Hashtable са две колекции в Java, използвани за съхраняване на двойки ключ / стойност в хеш-таблицата. Hashtable е синхронизирана карта, а HashMap е несинхронизирана карта. Независимо от това, ако трябва да използвате синхронизирана карта, Hashtable е по-бърза от използването на HashMap в синхронизирана обвивка. И двете са базирани на хеш колекции в Java, но имат справедлив дял от различията. Изтъкваме някои основни разлики между двете, за да ви помогнем да разберете по-добре условията.

Какво е HashMap?

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

Какво е Hashtable?

За разлика от HashMap, Hashtable е синхронизирана карта и е безопасна за конци, което означава, че може да бъде споделена между множество нишки. В Hashtable указвате обект, който може да се използва като ключ, и стойността, която върви с ключа. A Hashtable картографира ключовете към стойностите с помощта на хеш функция. Java предоставя тази функция под формата на метод на hashcode () на Object, който класовете отменя, за да предостави подходящи хеш-кодове. За разлика от HashMap, Hashtable не поддържа нулеви стойности и нулеви ключове, защото има нулева проверка в пут метода на изпълнение на Hashtable.

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

  1. Основи на HashMap Vs. Hashtable

И двете са базирани на хеш колекции в Java, използвани за съхраняване на данни в двойки ключ / стойност. HashMap е реализация на карта, базирана на хеш таблица, която осигурява постоянна производителност за вмъкване и локализиране на двойки. Производителността може да се регулира с помощта на конструктори, които ви позволяват да зададете коефициента на капацитет и натоварване на хеш таблицата. Основният Hashtable е доста подобен на HashMap, дори надолу по имената на методите. Той съхранява двойка ключ / стойност в хеш таблицата. В Hashtable указвате обект, който може да се използва като ключ, и стойността, която върви с ключа.

  1. Синхронизация на HashMap Vs. Hashtable

И HashMap, и Hashtable използват хеширане техники за съхранение на стойности въз основа на ключа. Подобно на HashMap, Hashtable използва двойки ключ / стойност, за да съхранява стойности в хеш-таблицата. Ключовата разлика между двете обаче е синхронизацията. HashMap е несинхронизирана карта, докато Hashtable е синхронизирана карта. Това означава, че HashMap не е защитен с нишки и не може да бъде споделен между множество нишки без подходящ код за синхронизация. Напротив, Hashtable е безопасен за конци и може да се споделя между множество нишки. Hashtable е по-бързо от използването на HashMap в синхронизирана обвивка, ако трябва да използвате синхронизирана карта.

  1. Нулеви ключове и нулеви стойности за HashMap Vs. Hashtable

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

  1. Изпълнение на HashMap Vs. Hashtable

Тъй като HashMap не е синхронизирана карта, той е много по-бърз и по-добър от Hashtable по отношение на производителността и всъщност използва по-малко памет от Hashtable. Въпреки че са практически идентични, Hashtable е малко по-бавен от HashMap, но по-бърз от синхронизирания HashMap. По своята същност не е безопасно да използвате Hashtable с многонишков достъп, тъй като само методите са синхронизирани. Hashtable е синхронизиран аналог на HashMap. Несинхронизираните обекти се представят по-добре в сравнение със синхронизирани обекти, точно както Hashtable се представя по-добре в среда с една нишка.

HashMap срещу Hashtable: Сравнителна диаграма

Обобщение на HashMap Vs. Hashtable

Класът HashMap ви дава несортирана, неподредена карта. Така че, когато имате нужда от карта и не ви пука за реда, в който се съхраняват записите, тогава HashMap е пътят.

Хешбел, също като Vector, е от праисторически времена на Java. Точно както Vector е синхронизиран партньор на по-модерния и усъвършенстван ArrayList, Hashtable е синхронизиран аналог на HashMap. Един клас обаче не може да бъде синхронизиран, така че когато казваме, че Hashtable е синхронизирана карта, това означава, че ключовите методи на класа са синхронизирани.

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

Препратки

  • Кредит за изображение: https://upload.wikimedia.org/wikipedia/commons/thumb/7/7b/Java.util.Map_hierarchy.svg/2000px-Java.util.Map_hierarchy.svg.png
  • Кредит за изображение: https://upload.wikimedia.org/wikipedia/commons/thumb/d/d0/Hash_table_5_0_1_1_1_1_1_LL.svg/500px-Hash_table_5_0_1_1_1_1__LL.svg.png
  • Сиера, Катрин. Всичко в една Java 2. New Delhi: Dreamtech Press, 2003. Печат
  • Фрисен, Джеф. Начало на Java 7. NYC: Apress, 2012. Печат
  • Ширази, Джак. Настройка на производителността на Java. Севастопол, Калифорния: O'Reilly Media, 2003. Печат
  • Еккел, Брус. Мислене на Java. Ню Джърси: Prentice Hall, 2003. Печат