Gaya Hidup

Kamus dan Hashtable dalam Teknologi, pengertian, perbedaan

Pengantar Kamus dan Hashtable

Kamus diketik (sehingga valuetypes tidak perlu boxing), sebuah Hashtable tidak (jadi valuetypes perlu boxing). Hashtable memiliki cara yang lebih baik untuk mendapatkan nilai daripada kamus IMHО, karena ia selalu tahu nilainya merupakan objek.

Meskipun jika Anda menggunakan.NET 3.5, mudah untuk menulis metode ekstensi untuk kamus untuk mendapatkan perilaku serupa.

Kelas Hashtable adalah tipe khusus dari kelas kamus yang menggunakan nilai integer (disebut hash) untuk membantu penyimpanan kuncinya. Kelas Hashtable menggunakan hash untuk mempercepat pencarian kunci tertentu dalam koleksi.

Setiap objek di.NET berasal dari kelas objek. Kelas ini mendukung metode GetHash, yang mengembalikan bilangan bulat yang secara unik mengidentifikasi objek.

Kelas Hashtable adalah koleksi yang sangat efisien secara umum. Satu-satunya masalah dengan kelas Hashtable adalah membutuhkan sedikit overhead, dan untuk koleksi kecil (kurang dari sepuluh elemen) overhead dapat menghambat kinerja.

Ada satu lagi perbedaan penting antara HashTable dan Kamus. Jika Anda menggunakan pengindeks untuk mendapatkan nilai dari HashTable, HashTable akan berhasil mengembalikan null untuk item yang tidak ada, sedangkan Kamus akan menampilkan kesalahan jika Anda mencoba mengakses item menggunakan pengindeks yang tidak ada di Kamus.

HashTable adalah kelas dasar yang diketik dengan lemah; kelas abstrak DictionaryBase diketik dengan kuat dan menggunakan HashTable secara internal. Hal aneh yang diperhatikan tentang Kamus adalah, ketika kami menambahkan beberapa entri dalam Kamus, urutan penambahan entri dipertahankan.

Jadi jika Anda menerapkan foreach pada Kamus, Anda akan mendapatkan catatan dalam urutan yang sama dengan yang Anda masukkan. Padahal, ini tidak benar dengan HashTable normal, ketika Anda menambahkan catatan yang sama di Hashtable pesanan tidak dipertahankan.

Jika ‘Kamus didasarkan pada Hashtable’ benar, mengapa Kamus mempertahankan urutannya tetapi HashTable tidak?

Mengapa mereka berperilaku berbeda, itu karena Kamus Generik mengimplementasikan hashtable, tetapi tidak didasarkan pada System.Cоllections.Hashtable. Implementasi Kamus Generik didasarkan pada pengalokasian pasangan nilai-kunci dari daftar.

Ini kemudian diindeks dengan ember hashtable untuk akses acak, tetapi ketika mengembalikan enumerator, itu hanya menjalankan daftar secara berurutan – yang akan menjadi urutan penyisipan selama entri tidak digunakan kembali.