Сравнителна таблица
Основа за сравнение | HashMap | LinkedHashMap |
---|---|---|
Основен | Редът за поставяне в HashMap не се запазва. | Редът за вмъкване е запазен в LinkedHashMap. |
Структура на данни | HashMap използва HashTable за съхраняване на карти. | LinkedHashMap използва HashTable заедно с Linked List за съхраняване на картата. |
Разширява / Реализира | HashMap разширява AbstractMap и реализира интерфейса на картата. | LinkedHashMap разширява Hashmap. |
версия | HashMap бе въведена в JDK 2.0. | LinkedHashMap бе въведена в JDK 4.0. |
Отгоре | Сравнително по-малко режийни. | Сравнително повече разходи, защото трябва да поддържа реда на записите в картата. |
Дефиниция на HashMap
HashMap е клас, който се използва за създаване на карта. Той изпълнява Map Interface. Той също така разширява клас AbstractMap, така че да може да използва хеш таблица за съхраняване на записите в картата. Въвеждането на картата е двойка, където всеки ключ е свързан със стойността. Ключът в записа се използва за извличане на стойността, следователно ключът трябва да е уникален. Ето защо дублиращите се ключове не са позволени в HashMap. Но ключът във всеки запис на картата може да има различен тип, т.е. ключовете в картата, създадени от HashMap, могат да бъдат разнородни. Структурата на данните, използвана от HashMap за съхраняване на карта, е хеш таблица.
Редът за вмъкване на записите в HashMap не се запазва. Вмъкването на записи в картата, създадена с помощта на HashMap, се основава на хеш кода, изчислен от ключовете в записите. Ако по погрешка сте въвели дублиращ се ключ в HashMap, той ще замени предишната стойност на този ключ с новата предложена стойност и ще върне старата стойност. Ако не се използва дублиращ се ключ и не е извършена подмяна, ключът винаги връща Null. Нека видим как да добавим записите към хеш картата със следния пример.
Hashmap hm = new Hashmap (); hm.put ("Ajay", 275); hm.put ("Виджай", 250); hm.put ("Jonny", 150); hm.put ("Йордания", 200); System.out.println (hm); / * изход * / {Vijay = 250, Jonny = 150, Ajay = 275, Йордания = 200}
Както и в горния код, можете да видите, че създадох обект от HashMap и добавих записите с метода puts и когато отпечатах HashMap обекта, записите не се отпечатват в реда, в който са били поставени. Следователно, не можете да претендирате, че реда на записите в HashMap ще се върне. HashMap използва всички методи на Map интерфейс и AbstractMap клас и не въвежда нов метод; има собствени конструктори. По подразбиране капацитетът на хеш картата е 16, а коефициентът на попълване по подразбиране е 0.75 .
Дефиниция на LinkedHashMap
LinkedHashMap също е клас, който създава карта. LinkedHashMap разширява HashMap класа и е представен по-късно в HashMap в JDK версия 4.0. Като дете клас на HashMap клас LinkedHashMap е точно същия като HashMap клас, включително конструктори и методи. Но, LinkedHashMap се различава в смисъл, че поддържа реда на вмъкване на записите в картата. Структурата на данните, която се използва от LinkedHashMap за съхраняване на картата е свързан списък и хеш таблица .
В допълнение към методите, наследени от HashMap, LinkedHashMap въвежда един нов метод, който е removeEldestEntry () . Този метод се използва за премахване на най-стария запис в картата. Капацитетът по подразбиране на LinkedHashMap е 16, а коефициентът на попълване по подразбиране е 0.75, което също е подобно на класа HashMap.
Ключови разлики между HashMap и LinkedHashMap в Java
- Най-важната разлика е, че редът на вмъкване на HashMap не се запазва, докато редът на вмъкване на LinkedHashMap се запазва .
- Структурата на данните, използвана от HashMap за съхраняване на елементите на картата е Hashtable . От друга страна, структурата на данните, използвана от LinkedHashMap е свързан списък и Hashtable .
- Класът HashMap разширява клас AbstractMap и изпълнява интерфейса на картата . Класът LinkedHashMap обаче е дъщерен клас на класа HashMap, т.е. класът LinkedHashMap разширява класа HashMap.
- Класът HashMap бе въведен в версията JDK 2.0 . Класът LinkedHashMap беше представен по-късно в JDK 4.0 версията.
- Сравнително класът LinkedHashMap има повече натоварвания от HashMap, тъй като трябва да поддържа реда на елементите, вмъкнати в картата.
Заключение:
LinkedHashMap трябва да се използва само когато сме загрижени за последователността на елементите, въведени в картата.