Jenis Koleksi Hashtable dan Kamus

Kelas System.Collections.Hashtable, serta kelas generik System.Collections.Generic.Dictionary<TKey,TValue> dan System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue>, mengimplementasikan antarmuka System.Collections.IDictionary. 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. Bucket adalah subgrup virtual elemen dalam Hashtable, yang membuat pencarian dan pengambilan lebih mudah dan lebih cepat daripada di sebagian besar kumpulan. 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 untuk 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 konstruktor Hashtable yang menerima implementasi IHashCodeProvider 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 mungkin 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 "keruk"; oleh karena itu, string "piknik" dan "keruk" akan berada di wadah yang berbeda. Sebaliknya, "stressed" dan "desserts" akan memiliki kode hash yang sama dan akan berada di bucket yang sama.

Kelas Dictionary<TKey,TValue> dan ConcurrentDictionary<TKey,TValue> memiliki fungsionalitas yang sama dengan Hashtable kelas . Jenis tertentu Dictionary<TKey,TValue> (selain Object) memberikan performa yang lebih baik dibandingkan Hashtable untuk jenis nilai. Ini karena elemen dari tipe Hashtable adalah Object; oleh karena itu, proses konversi antara tipe nilai dan tipe objek biasanya terjadi saat Anda menyimpan atau mengambil tipe nilai. Kelas ConcurrentDictionary<TKey,TValue> harus digunakan ketika beberapa utas mungkin mengakses koleksi secara bersamaan.

Lihat juga