Datang dari dunia Java ke C # one apakah ada HashMap yang setara? Jika tidak, apa yang akan Anda rekomendasikan?
326
Dictionary
mungkin yang terdekat. System.Collections.Generic.Dictionary
mengimplementasikan System.Collections.Generic.IDictionary
antarmuka (yang mirip dengan Map
antarmuka Java ).
Beberapa perbedaan penting yang harus Anda perhatikan:
put
dan get
metode untuk mengatur / mendapatkan item
myMap.put(key, value)
MyObject value = myMap.get(key)
[]
pengindeksan untuk mengatur / mendapatkan item
myDictionary[key] = value
MyObject value = myDictionary[key]
null
kunci
HashMap
memungkinkan kunci nolDictionary
melempar ArgumentNullException
jika Anda mencoba menambahkan kunci nolHashMap
akan menggantikan nilai yang ada dengan yang baru.Dictionary
akan mengganti nilai yang ada dengan yang baru jika Anda menggunakan []
pengindeksan. Jika Anda menggunakan Add
metode ini, ia akan membuang ArgumentException
.HashMap
akan mengembalikan nol.Dictionary
akan melempar KeyNotFoundException
. Anda dapat menggunakan TryGetValue
metode alih-alih []
pengindeksan untuk menghindari ini:MyObject value = null;
if (!myDictionary.TryGetValue(key, out value)) { /* key doesn't exist */ }
Dictionary
Ada ContainsKey
metode yang dapat membantu menangani dua masalah sebelumnya.
Dictionary
lempar Pengecualian saat menambahkan kunci duplikat.if (!myDictionary.TryGetValue(key, value))
membutuhkanout
argumen kedua. Jadiif (!myDictionary.TryGetValue(key, out value))
Dari C # setara dengan Java HashMap
Saya membutuhkan Kamus yang menerima kunci "null", tetapi sepertinya tidak ada yang asli, jadi saya telah menulis sendiri. Sebenarnya sangat sederhana. Saya mewarisi dari Kamus, menambahkan bidang pribadi untuk menyimpan nilai untuk kunci "null", kemudian menimpa pengindeks. Bunyinya seperti ini:
Semoga ini bisa membantu seseorang di masa depan.
==========
Saya memodifikasinya ke format ini
sumber
Biarkan saya membantu Anda memahaminya dengan contoh "algoritma codaddict"
' Kamus dalam C #' adalah ' Hashmap in Java' dalam paralel paralel.
Beberapa implementasi berbeda. Lihat contoh di bawah ini untuk memahami lebih baik.
Mendeklarasikan Java HashMap:
Mendeklarasikan Kamus C #:
Mendapatkan nilai dari lokasi:
Menetapkan nilai di lokasi:
Contoh Keseluruhan dapat diamati dari algoritma Codaddict di bawah ini.
algoritma codaddict di Jawa:
Algoritma Codaddict dalam C #
sumber
Lihat dokumentasi di MSDN untuk kelas Hashtable .
Juga, perlu diingat bahwa ini bukan thread-safe.
sumber
Dictionary<TKey, TValue>
lebih disukai, karena kompilasi memeriksa jenis waktu dan karena itu tidak memerlukan tinju jenis nilai.Gunakan Kamus - ini menggunakan hashtable tetapi typesafe.
Juga, kode Java Anda untuk
akan diberi kode terbaik dalam C # dengan cara ini:
Dengan cara ini, Anda dapat menentukan kebutuhan variabel "a" di dalam blok dan masih dapat diakses di luar blok jika Anda membutuhkannya nanti.
sumber
jawabannya adalah
lihat fungsi saya, penambahan sederhana menggunakan fungsi anggota paling penting di dalam Kamus
fungsi ini kembali salah jika daftar berisi item duplikat
sumber
Saya hanya ingin memberikan dua sen.
Ini sesuai dengan jawaban @Powerlord.
Letakkan "null" sebagai ganti string nol .
sumber