Bekerja dengan Hashtable dan Kamus di C #

Microsoft .Net Framework menyediakan dukungan luar biasa untuk bekerja dengan koleksi. Koleksi digunakan untuk penyimpanan dan pengambilan data. Anda menggunakan koleksi dalam aplikasi Anda untuk mengalokasikan memori secara dinamis untuk menyimpan elemen dan kemudian mengambilnya menggunakan kunci atau indeks jika diperlukan. Pada dasarnya, koleksi mewakili sekumpulan objek yang dapat Anda akses dengan mengulang setiap elemen koleksi.

Hashtable

Tipe dalam namespace System.Collections menyimpan data sebagai objek bertipe Object. Hashtable mewakili struktur data yang dapat menyimpan objek sebagai pasangan nilai kunci. Anda dapat mencari nilai dalam instance kelas Hashtable menggunakan kunci yang sesuai. Perhatikan bahwa kunci dan nilai yang disimpan dalam instance Hashtable adalah tipe objek. Perhatikan bahwa kunci tidak boleh nol. Anda tetap dapat menyimpan nilai null. Daftar kode berikut menggambarkan bagaimana Anda dapat menyimpan dan mengambil kunci / nilai dari instance Hashtable.

static void Main()

       {

           Hashtable hashTable = new Hashtable();

           hashTable.Add(1, "Joydip");

           hashTable.Add(2, "James");

           hashTable.Add(3, "Steve");

           Console.WriteLine("The key / value pairs are:--");

           foreach (int key in hashTable.Keys)

           {

               Console.WriteLine("Key: "+ key + " Value: "+ hashTable[key].ToString());

           }

           Console.Read();

       }

Anda juga dapat memanfaatkan metode GetEnumerator () dari kelas Hashtable dan kemudian menghitung koleksi untuk mengambil pasangan kunci / nilai yang disimpan di dalamnya. Berikut potongan kode yang menggambarkan hal ini.

IDictionaryEnumerator enumerator = hashTable.GetEnumerator();

while (enumerator.MoveNext())

{

Console.WriteLine("Key: " + enumerator.Key.ToString() + " Value: " + enumerator.Value.ToString());

}

Anda juga dapat memanfaatkan kelas DictionaryEntry untuk mengulang item dalam Hashtable. Cuplikan kode berikut menggambarkan bagaimana hal ini dapat dilakukan.

Hashtable hashTable = new Hashtable();

hashTable.Add(1, "Joydip");

hashTable.Add(2, "James");

hashTable.Add(3, "Steve");

foreach (DictionaryEntry dictionaryEntry in hashTable)

{

   Console.WriteLine("Key: " + dictionaryEntry.Key.ToString() + " Value: " + dictionaryEntry.Value.ToString());

}

Mencari item dalam Hashtable lebih cepat dibandingkan dengan koleksi non-umum lainnya - mari kita pahami alasannya. Record dalam Hashtable dalam beberapa keranjang (setiap keranjang dapat berisi beberapa catatan) menggunakan kunci hash. Kunci hash pada gilirannya dihasilkan secara otomatis dengan menggunakan algoritma hashing. MSDN menyatakan: "Ketika sebuah elemen ditambahkan ke Hashtable, elemen tersebut ditempatkan ke dalam keranjang berdasarkan kode hash dari kunci tersebut. Pencarian kunci selanjutnya menggunakan kode hash dari kunci tersebut untuk mencari hanya dalam satu wadah tertentu, sehingga secara substansial mengurangi jumlah perbandingan utama yang diperlukan untuk menemukan elemen. "

Kamus

Beberapa kelas penting dalam System.Collections.Generic namsepace meliputi: List, Queue, HashSet, LinkedList, Stack, LinkedListNode, dan Dictionary. Kelas Dictionary di C # mewakili struktur data umum yang dapat berisi kunci dan nilai data. Karenanya, Anda dapat menyimpan data jenis apa pun dalam instance Kamus.

Perhatikan bahwa sementara antarmuka ICollection memperluas antarmuka IEnumerable, kedua antarmuka IDictionary dan IList memperluas antarmuka ICollection. Kelas Dictionary terdapat di dalam namespace System.Collections.Generic. Intinya, Kamus berisi kumpulan umum pasangan kunci / nilai. Anda dapat memanfaatkan metode Tambah dari kelas Kamus untuk menyimpan objek dalam contoh Kamus. Kamus lebih cepat daripada Hashtable karena menghilangkan biaya tambahan tinju dan un-boxing.

Cuplikan kode berikut menunjukkan bagaimana Anda dapat menyimpan dan mengambil objek di dalam instance Dictionary.

Dictionary dictionary = new Dictionary();

dictionary.Add(1, "Joydip");

dictionary.Add(2, "James");

dictionary.Add(3, "Steve");

foreach (KeyValuePair kvp in dictionary)

{

Console.WriteLine(kvp.Key.ToString() + " - " + kvp.Value.ToString());

}

Perbedaan mendasar antara Hashtable dan Dictionary adalah bahwa sementara yang pertama tidak diketik dan membutuhkan overhead tinju dan un-boxing, yang terakhir tidak seperti yang diketik. Ada perbedaan lain di antara keduanya. Jika Anda menggunakan pengindeks untuk mengambil nilai dari instance Hashtable dan item tidak ada, Anda akan mendapatkan nilai null. Sebaliknya, jika Anda mencoba mengambil item yang tidak ada dari instance Dictionary, pengecualian akan muncul. Perhatikan bahwa baik Hashtable maupun Dictionary tidak akan menjamin pelestarian urutan item dalam koleksi.

Sementara Hashtable adalah struktur data dengan tipe tipe lemah, Dictionary adalah tipe yang sangat kuat. Pilihan antara Hashtable dan Dictionary bergantung pada apakah Anda memerlukan jenis koleksi yang aman. Dalam kebanyakan kasus, Kamus adalah pilihan yang baik. Sederhananya, Dictionary adalah Hashtable yang ditingkatkan. Saya sering menggunakan Kamus melalui Hashtable.