HashMap va LinkedHashMap Java platformasida eng keng tarqalgan va umumiy maqsadlarga mo'ljallangan xaritalardan biridir. Ular asosan hashga asoslangan sinflar bo'lib, ular bir-biriga juda o'xshash va Xaritani yaratishda ishlatiladi. Map interfeysi - bu kalitlar noyob bo'lgan qiymatga ega bo'lgan birlashmalar to'plami tomonidan qo'llab-quvvatlanadigan operatsiyalarni belgilaydigan eng muhim Collections Framework interfeysidir. Ushbu xaritani amalga oshirish hashing algoritmiga asoslangan. HashMap klassi tartiblanmagan xaritalarni amalga oshirsa, LinkedHashMap klass buyurtma qilingan xaritalarni amalga oshiradi. LinkedHashMap dasturini amalga oshirish HashMap sinfining quyi sinfidir, ya'ni HashMap sinfining xususiyatlarini meros qilib oladi. Ishlash jihatidan ikkalasi o'rtasida unchalik katta farq yo'q. Keling, ko'rib chiqamiz.

HashMap nima?

HashMap - xesh-algoritmga asoslangan Java-da Map interfeysining eng keng tarqalgan va keng qamrovli dasturlaridan biri. Bu o'rnatilgan HashSet sinfiga o'xshaydi, lekin ikkala sinfda ham elementlar tartibsizdir. U hash jadvali sifatida amalga oshiriladi, lekin LinkedHashMap-dan farqli o'laroq, u kalitlar va qiymatlar bo'yicha hech qanday tartibni saqlamaydi. Umuman olganda, HashMap qo'yish va olish uchun doimiy ishlashni ta'minlaydi. Sinf xavfsiz emas, lekin bitta nol kalit va bir nechta null qiymatlarini olish mumkin. Qaytarilish tartibini saqlamaganligi sababli, kamroq xotirani talab qiladi.

LinkedHashMap nima?

LinkedHashMap xarita interfeysining to'rtta umumiy maqsadli dasturlaridan biri bo'lib, HashMap sinfining kichik sinfidir, chunki bu uning xususiyatlariga ega. Bu ishlash jihatidan HashMap-ga juda o'xshash bo'lsa ham, u kalitlarni xaritaga kiritilgan tartibda yoki xaritada yozuvlarni olish tartibida joylashtirilmasa bundan mustasno. U asosiy sinf shartnomasini iteratorlar o'z elementlarini qaytarish tartibini kafolatlash orqali yangilaydi. Ammo, bu HashMap-ga qaraganda ko'proq xotirani talab qiladi, chunki u Java-da ikkitadan bog'langan ro'yxatni saqlab turadi.

HashMap va LinkedHashMap o'rtasidagi farq

  1. HashMap va boshqalar asoslari. LinkedHashMap

HashMap - Java-da Map interfeysining xash-asoslangan amalga oshirilishidir. Xaritalar kalit qiymat juftliklari to'plamidir va ro'yxatlar buyurtma qilingan to'plamda bo'lganda ishlatiladi. HashMap - bu kalit-qiymat juftliklarida qiymatni saqlaydigan To'plam sinfi. Oddiy so'zlar bilan aytganda, u kalitlarga asoslangan qiymatni topishi mumkin bo'lgan ma'nolarga kalitlarni xaritasini beradi. LinkedHashMap - bu HashMap singari xarita interfeysining bog'langan ro'yxati, lekin unga kiritilgan elementlarning buyurtmalarini saqlab qolish bundan mustasno. Bu HashMap-ning kichik sinfidir, uning xususiyatlarini meros qilib oladi. LinkedHashMap HashMap-ning asosiy klassi kontraktini iteratorlar o'z elementlarini qaytarish tartibini kafolatlash orqali yangilaydi.

  1. Qaytarilish tartibi

HashMap va LinkedHashMap o'rtasidagi asosiy farq - bu buyurtma. HashMap elementlari tartibda emas, umuman tasodifiy, LinkedHashMap elementlari esa buyurtma qilingan. LinkedHashMap-ning yozuvlari kalitlarni kiritish tartibida, ya'ni xaritaga kalitlarni kiritish tartibida. Bu shuni anglatadiki, xaritaga kiritilgan birinchi kalit avval sanab o'tilgan, shuningdek, u bilan bog'liq bo'lgan qiymat va oxirgi ro'yxatga kiritilgan oxirgi yozuv. LinkedHashMap-da oldindan aytib bo'ladigan iteratsiya tartibi mavjud, ya'ni kirish tartibida o'z elementlarini saqlab turishi mumkin, ya'ni kirishlar tartibida.

  1. Amalga oshirish

Java-da Map interfeysini amalga oshirish uchun HashMap va LinkedHashMap sinflari xeshdan foydalanadilar, bundan tashqari HashMap hash jadvali sifatida amalga oshiriladi, LinkedHashMap esa barcha yozuvlari bo'yicha ishlaydigan paqirlarning ikkitadan bog'langan ro'yxatini saqlab turadi. Shu sababli LinkedHashMap HashMap-ga qaraganda ko'proq xotirani talab qiladi, chunki HashMap-dan farqli o'laroq, u tartibni saqlab turadi. Bu HashMap tomonidan tartibsiz buyurtmalarni olib tashlaydi, TreeMap-da boshqa xarajatlarga olib kelmasdan. Bundan tashqari, LinkedHashMap sinfi sinxronizatsiya va null tugmachalari / qiymatlari kabi ko'p jihatlar bo'yicha HashMap sinfiga juda o'xshash, chunki ikkalasi ham bitta null kalit va bir nechta null qiymatlarni olish imkonini beradi.

  1. HashMap va boshqalar uchun ishlash. LinkedHashMap

Garchi har ikkala sinf ham taqqoslanadigan ishlashni ta'minlasa ham, HashMap klassi, agar xaritaning iteratsiya tartibini kafolatlamasa, buyurtma qilish qiyin bo'lsa, afzalroq deb hisoblanadi. Kalitga asoslangan yozuvlarni qo'shish, o'chirish yoki topish kabi operatsiyalar doimiy vaqtdir, chunki ular kalitni o'chirib tashlaydi. Shunday qilib, LinkedHashMap-da yozuvlarni qo'shish, olib tashlash va topish HashMap-ga qaraganda bir oz sekinroq bo'lishi mumkin, chunki u Java-dagi ikki baravar bog'liq paqirlarning ro'yxatini saqlab turadi. Bundan tashqari, HashMap LinkedHashMap-ga qaraganda kamroq xotirani talab qiladi, chunki hech qanday tartib saqlanmaydi.

HashMap va boshqalar. LinkedHashMap: taqqoslash jadvali

HashMap va boshqalar haqida qisqacha ma'lumot. LinkedHashMap

Ikkala HashMap va HashMap sinflari ishlash jihatidan bir-biriga o'xshash bo'lsa-da, HashMap bir-biriga bog'langanHashMap-ga qaraganda kamroq xotirani talab qiladi, chunki u xaritaning iteratsion tartibini kafolatlamaydi, bu esa HashMap-da yozuvlarni qo'shishni, olib tashlashni va yozuvlarni topishni osonlashtiradi. a LinkedHashMap. Biroq, ikkalasining asosiy farqi bu tartib: HashMap elementlari tartibda emas, LinkedHashMap elementlari esa xaritaga kalitlarni kiritish tartibini anglatuvchi sukut bo'yicha kalitlarni kiritish tartibida. LinkedHashMap shuningdek kirish elementlari tartibida o'z elementlarini saqlab turishi mumkin, bu kirishlar tartibini anglatadi. LinkedHashMap-da bo'lgani kabi, ikkitomonlama bog'langan ro'yxatni saqlash kerak, u HashMap-ga qaraganda unumdorligi past.

Adabiyotlar

  • Tasvir krediti: https://upload.wikimedia.org/wikipedia/commons/thumb/e/ec/Grepcode_Screenshot_HashMap.jpg/640px-Grepcode_Screenshot_HashMap.jpg
  • Tasvir krediti: https://upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Map_Classes.jpg/640px-Map_Classes.jpg
  • Naftalin, Moris va Filipp Vadler. Java avlodlari va to'plamlari. Sebastopol, Kaliforniya: O'Reilly Media, 2006. Chop etish
  • Mug'al, Xolid Azim va Rolf V. Rasmussen. Java dasturini sertifikatlash bo'yicha dasturchi qo'llanmasi. Boston: Addison-Uesli, 2003 yil. Chop etish
  • Flanagan, Devid. Ya'ni, Java. Sebastopol, Kaliforniya: O'Reilly Media, 2005. Chop etish