Perbezaan Antara Kamus dan Hashtable

Kamus vs Hashtable

Kamus ditaip (nilai-nilai yang tidak perlu dibaca), Hashtable tidak (nilai-nilai penting perlu dibaca). Hashtable mempunyai cara yang lebih baik untuk mendapatkan nilai daripada IMHO kamus, kerana ia selalu diketahui nilai itu adalah suatu objek. Sekiranya anda menggunakan .NET 3.5, mudah untuk menulis extensiоn mоd fоr dictionary tо mendapatkan tingkah laku yang sama.

Kelas Hashtable adalah jenis khusus kelas kamus yang menggunakan nilai integer (dipanggil hash) untuk membantu dalam storage kuncinya. Kelas Hashtable menggunakan hash untuk mempercepatkan carian untuk kunci tertentu di dalamnya. Setiap objek dalam .NET diperolehi daripada kelas Object. Kelas ini menggalakkan GetHash method, yang mengembalikan integer yang secara unik mengenal pasti objek tersebut. Kelas Hashtable adalah clollectión yang sangat berkesan secara umum. Isu yang jelas dengan kelas Hashtable ialah ia memerlukan sedikit ketinggian, dan sedikit demi sedikit (kurang dari sepuluh unsur) yang dapat menghalang kecerdasan.

Terdapat satu lagi perbezaan yang tidak baik antara HashTable dan Kamus. Sekiranya anda menggunakan pengindeks untuk mendapatkan nilai dari HashTable, HashTable akan berjaya mengembalikan batal untuk item yang tidak ada, sedangkan Kamus akan menyimpang jika anda cuba mengakses item menggunakan pengindeks yang tidak wujud dalam Kamus.

HashTable adalah kelas asas yang ditaip lemah; kelas abstrak DictionaryBase diketik dengan betul dan menggunakan HashTable secara dalaman.

Satu perkara pelik yang diperhatikan adalah Kamus abcout adalah, apabila kita menambah banyak entri dalam Kamus, pengepala di mana penyertaan yang ditambah dikekalkan. Oleh itu, jika anda menggunakan foreach dalam Dictionary, anda akan mendapat rekod-rekod yang sama dengan anda yang telah memasukkannya. Sedangkan, ini tidak benar dengan HashTable nada, apabila anda menambah rekod yang sama dalam Hashtable yang tidak dikendalikan. Jika 'Kamus berdasarkan Hashtable' adalah benar, mengapa Kamus mengekalkan kata laluan tetapi HashTable tidak boleh?

Seperti yang mengapa mereka berkelakuan secara berbeza, itu kerana Kamus Umum menerapkan hashtable, tetapi tidak berdasarkan System.Collectiоns.Hashtable. The Generic Dictionary implementatiоn didasarkan pada all-key-value-pairs dari senarai. Ini kemudiannya diindeks dengan keranjang hashabel untuk akses randol, tetapi apabila ia mengembalikan enumerat,, ia hanya berjalan senarai dalam urutan berurutan - yang akan menjadi objek yang tidak disengajakan kerana entri tidak digunakan semula.