Lüğət və Hashtable
Lüğət yazılır (dəyər növləri üçün boks tələb olunmur), Hashtable deyil (dəyər növləri üçün boks lazımdır). Hashtable-da dəyər əldə etməyin IMHO lüğətindən daha gözəl yolu var, çünki o, həmişə dəyərin obyekt olduğunu bilir. Baxmayaraq ki,. NET 3.5 istifadə edirsinizsə, oxşar davranışı əldə etmək üçün lüğət üçün genişləndirmə metodu yazmaq asandır.
Hashtable sinfi açarlarının saxlanmasına kömək etmək üçün tam dəyərdən (heş adlanır) istifadə edən lüğət sinfinin xüsusi növüdür. Hashtable sinfi kolleksiyada xüsusi açarın axtarışını sürətləndirmək üçün hashdan istifadə edir. İçindəki hər bir obyekt. NET Object sinifindən gəlir. Bu sinif obyekti unikal şəkildə müəyyən edən tam ədədi qaytaran GetHash metodunu dəstəkləyir. Hashtable sinfi ümumiyyətlə çox səmərəli kolleksiyadır. Hashtable sinfi ilə bağlı yeganə problem odur ki, o, bir qədər əlavə məsrəf tələb edir və kiçik kolleksiyalar üçün (on elementdən az) yuxarı yük performansa mane ola bilər.
HashCədvəl və Lüğət arasında daha bir mühüm fərq var. Əgər siz HashCədvəldən dəyər əldə etmək üçün indeksləşdiricilərdən istifadə etsəniz, HashCədvəli mövcud olmayan element üçün müvəffəqiyyətlə null qaytaracaq, Lüğətdə olmayan indeksləşdiricidən istifadə edərək elementə daxil olmağa cəhd etsəniz, Lüğət səhvə yol verəcək.
HashCədvəli zəif yazılmış əsas sinifdir; DictionaryBase mücərrəd sinfi sadə şəkildə yazılır və daxildə HashCədvəldən istifadə edir.
Lüğətdə diqqət çəkən qəribə cəhət odur ki, Lüğətə çoxlu yazı əlavə etdikdə yazıların əlavə olunma sırası qorunur. Beləliklə, Lüğətdə foreach tətbiq etsəniz, qeydləri daxil etdiyiniz ardıcıllıqla əldə edəcəksiniz. Halbuki, bu normal HashTable ilə doğru deyil, Hashtable-a eyni qeydləri əlavə etdiyiniz zaman sıra qorunmur. Əgər 'Lüğət Hashtable'a əsaslanır' doğrudursa, niyə Lüğət sıranı saxlayır, amma HashTable saxlamır?
Niyə fərqli davrandıqlarına gəlincə, bunun səbəbi Ümumi Lüğətin hashtable tətbiq etməsi, lakin System. Collections. Hashtable-a əsaslanmamasıdır. Ümumi Lüğətin tətbiqi siyahıdan açar-dəyər cütlərinin ayrılmasına əsaslanır. Daha sonra bunlar təsadüfi giriş üçün hashtable vedrələri ilə indeksləşdirilir, lakin o, nömrələyicini qaytardıqda o, sadəcə siyahıda ardıcıl qaydada gəzir – qeydlər təkrar istifadə olunmadığı müddətcə bu, daxil edilmə sırası olacaq.