Lug'at va Xeshtable o'rtasidagi farq

Lug'at va Xeshtable o'rtasidagi farq
Lug'at va Xeshtable o'rtasidagi farq

Video: Lug'at va Xeshtable o'rtasidagi farq

Video: Lug'at va Xeshtable o'rtasidagi farq
Video: LUG'AT VA KINO. SO'Z BOYLIGINGIZNI OSHIRING 2024, Iyul
Anonim

Lugat va Hashtable

Lug'at teriladi (shuning uchun qiymat turlari boksga muhtoj emas), Hashtable emas (shuning uchun qiymat turlari boksga muhtoj). Hashtable IMHO lug'atiga qaraganda qiymatni olishning yaxshi usuliga ega, chunki u har doim qiymatni ob'ekt ekanligini biladi. Agar siz. NET 3.5 dan foydalanayotgan bo'lsangiz ham, shunga o'xshash xatti-harakatlarni olish uchun lug'at uchun kengaytma usulini yozish oson.

Hashtable klassi lugʻat sinfining oʻziga xos turi boʻlib, kalitlarni saqlashda yordam berish uchun butun son qiymatidan (xesh deb ataladi) foydalanadi. Hashtable sinfi to'plamdagi ma'lum bir kalitni qidirishni tezlashtirish uchun xeshdan foydalanadi. Har bir ob'ekt ichida. NET Object sinfidan kelib chiqadi. Bu sinf GetHash usulini qo'llab-quvvatlaydi, bu ob'ektni yagona identifikatsiya qiluvchi butun sonni qaytaradi. Hashtable sinfi umuman olganda juda samarali to'plamdir. Hashtable sinfidagi yagona muammo shundaki, u biroz qo'shimcha xarajatlarni talab qiladi va kichik to'plamlar uchun (o'ndan kam element) qo'shimcha xarajatlar ishlashga to'sqinlik qilishi mumkin.

HashTable va Dictionary oʻrtasida yana bir muhim farq bor. Agar siz HashTable dan qiymat olish uchun indekslovchilardan foydalansangiz, HashTable mavjud bo'lmagan element uchun nullni muvaffaqiyatli qaytaradi, agar siz Lug'atda mavjud bo'lmagan indeksator yordamida elementga kirishga harakat qilsangiz, Lug'at xatoga yo'l qo'yadi.

Xesh jadvali zaif terilgan asosiy sinfdir; DictionaryBase abstrakt klassi faqat yoziladi va ichki XeshTabledan foydalanadi.

Lug'atda ko'rilgan g'alati narsa shundaki, biz Lug'atga bir nechta yozuvlarni qo'shganimizda, yozuvlarni qo'shish tartibi saqlanib qoladi. Shunday qilib, agar siz Lug'atda foreachni qo'llasangiz, siz ularni kiritgan tartibda yozuvlarni olasiz. Holbuki, bu oddiy HashTable bilan to'g'ri kelmaydi, Hashtable-ga bir xil yozuvlarni qo'shsangiz, tartib saqlanmaydi. Agar 'Lug'at Hashtable'ga asoslangan' to'g'ri bo'lsa, nima uchun Lug'at tartibni saqlaydi, lekin HashTable unday emas?

Nima uchun ular boshqacha yoʻl tutishiga kelsak, bu umumiy lugʻat xesh-jadvalni amalga oshiradi, lekin System. Collections. Hashtable-ga asoslanmagan. Umumiy lug'atni amalga oshirish ro'yxatdagi kalit-qiymat juftlarini ajratishga asoslangan. Keyin ular tasodifiy kirish uchun xesh-jadval paqirlari bilan indekslanadi, lekin u hisoblagichni qaytarganda, u roʻyxat boʻyicha ketma-ket tartibda yuradi – agar yozuvlar qayta ishlatilmasa, bu kiritish tartibi boʻladi.

Tavsiya: