Jenis Koleksi Hashtable dan Kamus
Kelas System.Collections.Hashtable, dan System.Collections.Generic.Dictionary<TKey,TValue> serta System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue> kelas generik, mengimplementasikan System.Collections.IDictionary antarmuka. Kelas Dictionary<TKey,TValue> generik juga mengimplementasikan IDictionary<TKey,TValue> antarmuka generik. Oleh karena itu, setiap elemen dalam koleksi ini adalah pasangan kunci dan nilai.
Objek Hashtable terdiri dari wadah yang berisi elemen koleksi. Wadah adalah subgrup virtual elemen dalam Hashtable, yang membuat pencarian dan pengambilan lebih mudah dan lebih cepat daripada di sebagian besar koleksi. Setiap wadah dikaitkan dengan kode hash, yang dihasilkan menggunakan fungsi hash dan didasarkan pada kunci elemen.
Kelas generik HashSet<T> adalah koleksi yang tidak diurutkan agar berisi elemen unik.
Fungsi hash adalah algoritma yang mengembalikan kode hash numerik berdasarkan kunci. Kuncinya adalah nilai beberapa properti objek yang disimpan. Fungsi hash harus selalu mengembalikan kode hash yang sama untuk kunci yang sama. Dimungkinkan bagi fungsi hash untuk menghasilkan kode hash yang sama untuk dua kunci yang berbeda, tetapi fungsi hash yang menghasilkan kode hash unik untuk setiap kunci unik menghasilkan performa yang lebih baik saat mengambil elemen dari tabel hash.
Setiap objek yang digunakan sebagai elemen dalam Hashtable harus dapat menghasilkan kode hash untuk dirinya sendiri dengan menggunakan implementasi GetHashCode metode. Namun, Anda juga dapat menentukan fungsi hash untuk semua elemen dalam Hashtable dengan menggunakan Hashtable konstruktor yang menerima IHashCodeProvider implementasi sebagai salah satu parameternya.
Ketika objek ditambahkan ke Hashtable, objek disimpan dalam wadah yang terkait dengan kode hash yang cocok dengan kode hash objek. Ketika nilai sedang dicari di Hashtable, kode hash dihasilkan untuk nilai tersebut, dan wadah yang terkait dengan kode hash tersebut dicari.
Misalnya, fungsi hash untuk string dapat mengambil kode ASCII dari setiap karakter dalam string dan menambahkannya bersama-sama untuk menghasilkan kode hash. String "piknik" akan memiliki kode hash yang berbeda dari kode hash untuk string "keranjang"; oleh karena itu, string "piknik" dan "keranjang" akan berada di wadah yang berbeda. Sebaliknya, "stres" dan "hidangan penutup" akan memiliki kode hash yang sama dan akan berada di wadah yang sama.
Kelas Dictionary<TKey,TValue> dan ConcurrentDictionary<TKey,TValue> memiliki fungsionalitas yang sama dengan Hashtable kelas. Dictionary<TKey,TValue> Jenis tertentu (selain Object) memberikan performa yang Hashtable lebih baik daripada untuk jenis nilai. Ini karena elemen berjenis HashtableObject; oleh karena itu, boxing dan unboxing biasanya terjadi saat Anda menyimpan atau mengambil jenis nilai. Kelas ConcurrentDictionary<TKey,TValue> harus digunakan ketika beberapa alur mungkin mengakses koleksi secara bersamaan.