Yangi kompyuter tilini o'rganganingizda, birinchi navbatda siz katta ma'lumot guruhlari bilan qanday ishlashni so'rashingiz mumkin. Ushbu mavzu ko'pincha "Ma'lumotlarning tuzilishi" mavzusida yoritiladi. Agar siz chuqurroq qazib olsangiz, boshqa ko'plab ma'lumotlar tuzilmalari orasida bog'langan ro'yxatlar, navbat, ustunlar va ikkilik daraxtlar kabi mavzular atrofida bo'lishingiz kerak. Java-da ushbu tuzilmalar Java Collections Framework-ning bir qismidir. To'plam bu bir nechta ma'lumotlar elementlarining guruhlanishiga taalluqli ma'lumotlar strukturasining bir turi va Java Collections Framework ushbu ob'ektlar guruhlari bilan ishlash usulini standartlashtiradi. Aslida, to'plamlar doirasi bir nechta maqsadlarga javob beradigan tarzda yaratilgan.

Butun to'plam doirasi standart interfeyslar atrofida ishlab chiqilgan. LinkedList, HashSet va TreeSet singari bir nechta standart amaliyotlar ushbu interfeyslar tomonidan sizning holatingizda ta'minlanadi. Bundan tashqari, agar xohlasangiz, o'z kollektsiyangizni ham amalga oshirishingiz mumkin. Shu bilan birga, to'plamlardan tashqari, ramka bir nechta xarita interfeyslari va sinflarini belgilaydi. Java-da uchta umumiy maqsadli xaritalar bajariladi - HashMap, TreeMap va LinkedHashMap - bu kalit / qiymat juftligini saqlaydi. Xaritalar texnik to'plamlar bo'lmasa ham, ular to'liq to'plamlar bilan birlashtirilgan. Aslida, xaritalar ob'ektlar o'rtasidagi birlashma guruhlariga qaratilgan. Ushbu maqolada HashMap va HashSet o'rtasidagi asosiy farqlar haqida qisqacha ma'lumot berilgan.

HashMap nima?

HashMap - bu xaritalar interfeysidan eng ko'p ishlatiladigan dastur bo'lib, unda elementlar tartibsiz joylashgan asosiy kalit / qiymat xaritasi taqdim etiladi. Kalitni sekin qidirish o'rniga u hash kod deb nomlangan maxsus qiymatdan foydalanadi. Xesh-kod - bu ob'ektda ma'lumot olish va uni ushbu ob'ekt uchun "nisbatan noyob" intga aylantirish usuli. U shunchaki hashing printsipi asosida ishlaydi, ya'ni identifikatsiya qilingan qiymatlarni xaritalash uchun hash funktsiyasidan foydalanadi. ArrayList va LinkedList-da Vector va Stack-larning o'rnini bosgani kabi, Hashtable-da HashMap-da almashtirish mavjud. U ichki Hashtable vakili yordamida Map interfeysini amalga oshirish uchun AbstractMap-ni kengaytiradi. Va boshqa umumiy maqsadlardagi singari, HashMap Xaritaning ixtiyoriy usullarini qo'llab-quvvatlaydi, nol qiymatlarni beradi va sinxronlashtirilmaydi.

HashSet nima?

HashSet - bu HashMap nusxasi bo'lgan hash jadvali bilan ta'minlangan Set interfeysini amalga oshiruvchi Java Collections Framework a'zolaridan biridir. Nomidan ko'rinib turibdiki, u xesh-jadval orqali amalga oshiriladi, elementlar ularning tarkibidan olingan joyda saqlanadigan qator. Xaritadan farqli o'laroq, to'plam aynan bir xil interfeysga ega to'plamdir, shuning uchun qo'shimcha funktsiyalar mavjud emas, chunki ikkita turli xil ro'yxatlar mavjud. HashSet tezkor izlash uchun maxsus ishlab chiqilgan hashing funktsiyasidan foydalanadi. Bu takrorlanuvchi qiymatlarni saqlay olmaydigan noyob ob'ektlarning tartibsiz to'plami. HashSet Set interfeysini amalga oshiradigan AbstractSet sinfini kengaytiradi. Biroq, HashSet o'zining superklasslari va interfeyslaridan boshqa qo'shimcha usullarni aniqlamaydi.

HashMap va HashSet o'rtasidagi farq

  1. Asosiy

HashMap - bu xaritalar interfeysidan eng ko'p ishlatiladigan dastur bo'lib, unda elementlar tartibsiz joylashgan asosiy kalit / qiymat xaritasi taqdim etiladi. U shunchaki hashing printsipi asosida ishlaydi, ya'ni identifikatsiya qilingan qiymatlarni xaritalash uchun hash funktsiyasidan foydalanadi. Boshqa tomondan, HashSet - bu HashMap nusxasi bo'lgan hash jadvali bilan ta'minlangan Set interfeysini amalga oshiruvchi Java Collections Framework a'zolaridan biridir. Oddiy qilib aytganda, HashMap Map interfeysini, HashSet esa Set interfeysini amalga oshiradi.

  1. Funktsionallik

HashSet saqlash uchun hash jadvalidan foydalanadigan to'plam yaratadi. Hash jadvali ma'lumotlarni hashing deb nomlangan usul yordamida saqlaydi. HashSet tezkor qidiruv uchun elementlar yoki qiymatlarni saqlash uchun maxsus ishlab chiqilgan hashing funktsiyasidan foydalanadi. HashSet funktsional imkoniyatlarining ko'pi HashSet TreeSet-ga ulashadigan AbstractCollection va AbstractSet superklassi orqali ta'minlanadi. HashMap ichki Hashtable vakili yordamida Map interfeysini amalga oshirish uchun AbstractMap-ni kengaytiradi. Ikkala sinf ham sinxronlashtirilmagan, ya'ni ular ip bilan xavfsiz ishlash uchun mos emas.

  1. Qiymatlarni takrorlash

Xaritada takroriy kalitlar mavjud emasligi sababli, HashMap takroriy kalitlarga ruxsat bermaydi, lekin takroriy qiymatlarga ega bo'lishga ruxsat beriladi. Bu HashMap-da takroriy qiymatlar bo'lishi mumkin degan ma'noni anglatadi, ammo siz ba'zi bir kalitlarga nisbatan yig'im sifatida foydalanishingiz mumkin. Har bir kalit HashMap-da noyob bo'lishi kerak va bitta kalitda birdan ortiq qiymat bo'lishi mumkin emas. O'z navbatida HashSet-da to'plamning aniq ta'rifi bo'yicha takroriy elementlar bo'lishi mumkin emas, ya'ni siz HashSet-da takroriy qiymatlarni saqlay olmaysiz. HashMap faqat bitta null tugmachasini olishga imkon beradi, lekin istalgan nol qiymatni beradi, HashSet esa faqat bitta null qiymatiga ruxsat beradi.

  1. Saqlash mexanizmi

HashMap hashing printsipi asosida ishlaydi, ya'ni hash algoritm yordamida osonlikcha qidirib topishni osonlashtirish uchun ichki ichida identifikatorlarni aniqlash uchun hash funktsiyasidan foydalaniladi. Haqiqiy hashing mexanizmi har doim bir xil ob'ektga qo'llanganda hashCode () ni qaytaradi. O'z navbatida, HashSet ob'ektlarni qo'shish yoki saqlash uchun HashMap-ni ichki ma'lumotlarning tuzilishi sifatida ishlatadi. Bu shuni anglatadiki, HashSet ob'ekti yaratilganda u HashMap ob'ektini yaratadi.

HashMap va HashSet: taqqoslash jadvali

HashMap va boshqalar haqida qisqacha ma'lumot. HashSet

Garchi HashMap va HashSet ikkalasi ham sinxronlashtirilmagan bo'lsa ham, ular xavfsiz va xavfsiz ishlarni bajarish uchun mos emas va ular bir-biridan farq qiladi, ular asosiy elementlarni qo'shish, o'chirish va hokazo kabi asosiy operatsiyalar uchun doimiy ishlashni ta'minlaydi, HashMap esa umumiy maqsadlarda amalga oshiriladi. Kalit / qiymat juftligini saqlaydigan Map interfeysi, HashSet Set interfeysining amalga oshirilishidir. HashSet dasturini amalga oshirish uchun HashMap-dan foydalanadi. Biroq, HashMap hashing printsipidan foydalanadi va uni tezda kalitni qidirish uchun ishlatadi.

Adabiyotlar

  • Zukowski, Jon. Java to'plamlari. Nyu-York shahri: Apress, 2008 yil. Chop etish
  • Ekkel, Bryus. Java-da o'ylash. Nyu-Jersi: Prentice Hall, 2003 yil. Chop etish
  • Naftalin, Moris va Filipp Vadler. Java avlodlari va to'plamlari. Sebastopol, Kaliforniya: O'Reilly Media, 2006. Chop etish
  • Tasvir krediti: https://upload.wikimedia.org/wikipedia/commons/3/3b/Java_collection_set_implementations.jpg
  • Tasvir krediti: https://en.wikipedia.org/wiki/Java_collections_framework#/media/Fayl:Java.util.Map_hierarchy.svg