HashSet<T> t = new HashSet<T>();
// add 10 million items
Dictionary<K, V> t = new Dictionary<K, V>();
// add 10 million items.
.Contains
Metode siapa yang akan kembali lebih cepat?
Hanya untuk memperjelas, persyaratan saya adalah saya memiliki 10 juta objek (yah, string benar-benar) yang perlu saya periksa apakah mereka ada dalam struktur data. Saya TIDAK AKAN PERNAH mengulang.
.net
performance
dictionary
hashset
halivingston
sumber
sumber
Jawaban:
Tes kinerja HashSet vs List vs Dictionary, diambil dari sini .
Tambahkan 1000000 objek (tanpa memeriksa duplikat)
Berisi centang untuk setengah dari objek koleksi 10.000
Hapus setengah objek dari koleksi 10.000
sumber
Saya berasumsi maksud Anda
Dictionary<TKey, TValue>
dalam kasus kedua?HashTable
adalah kelas non-generik.Anda harus memilih koleksi yang tepat untuk pekerjaan itu berdasarkan kebutuhan Anda yang sebenarnya. Apakah Anda benar - benar ingin memetakan setiap kunci ke sebuah nilai? Jika demikian, gunakan
Dictionary<,>
. Jika Anda hanya peduli sebagai satu set, gunakanHashSet<>
.Saya berharap
HashSet<T>.Contains
danDictionary<TKey, TValue>.ContainsKey
(yang merupakan operasi yang sebanding, dengan asumsi Anda menggunakan kamus Anda dengan bijaksana) pada dasarnya melakukan hal yang sama - mereka menggunakan algoritma yang sama, pada dasarnya. Saya kira dengan entriDictionary<,>
menjadi lebih besar Anda berakhir dengan kemungkinan lebih besar untuk meniup cache denganDictionary<,>
daripada denganHashSet<>
, tapi saya berharap itu tidak signifikan dibandingkan dengan rasa sakit memilih tipe data yang salah hanya dalam hal apa yang Anda mencoba untuk mencapai.sumber
Dictionary
karena alasan lain, Anda harus menggunakannya.Dari dokumentasi MSDN untuk Kamus <TKey, TValue>
Dengan catatan:
Saya tahu pertanyaan / postingan Anda sudah lama - tetapi ketika mencari jawaban untuk pertanyaan serupa, saya menemukan ini.
Semoga ini membantu. Gulir ke bawah ke bagian Keterangan untuk lebih jelasnya. https://msdn.microsoft.com/en-us/library/xfhwa508(v=vs.110).aspx
sumber
Ini adalah struktur data yang berbeda. Juga tidak ada versi generik
HashTable
.HashSet
berisi nilai tipe T yangHashTable
(atauDictionary
) berisi pasangan nilai kunci. Jadi, Anda harus memilih koleksi tentang data apa yang perlu Anda simpan.sumber
Jawaban yang diterima untuk pertanyaan ini TIDAK menjawab pertanyaan secara valid! Itu kebetulan memberikan jawaban yang benar, tetapi jawaban itu tidak ditunjukkan oleh bukti yang mereka berikan.
Apa yang ditunjukkan oleh jawaban itu adalah bahwa pencarian kunci di a
Dictionary
atauHashSet
jauh lebih cepat daripada mencari di aList
. Yang benar, tapi tidak menarik, tidak mengherankan, atau bukti bahwa mereka memiliki kecepatan yang sama .Saya telah menjalankan kode di bawah ini untuk membandingkan waktu pencarian, dan kesimpulan saya adalah bahwa sebenarnya kecepatannya sama. (Atau setidaknya, jika ada perbedaan, maka perbedaan tersebut berada dalam Standar Deviasi kecepatan tersebut)
Secara khusus, 100.000.000 pencarian membutuhkan waktu antara 10 dan 11,5 detik untuk keduanya, bagi saya, dalam pengujian ini.
Kode Tes:
sumber