Apa perbedaan antara a HashMap
dan a Hashtable
di Jawa?
Mana yang lebih efisien untuk aplikasi non-utas?
java
collections
hashmap
hashtable
dmanxiii
sumber
sumber
ConcurrentMap
ini tidak diperlukan di sini, sebagai Pertanyaan mengatakan “aplikasi non-threaded” yang berarti threading / konkurensi tidak menjadi masalah.Jawaban:
Ada beberapa perbedaan antara
HashMap
danHashtable
di Jawa:Hashtable
adalah disinkronkan , sedangkanHashMap
tidak. Ini membuatHashMap
lebih baik untuk aplikasi yang tidak berulir, karena Objek yang tidak disinkronkan biasanya berkinerja lebih baik daripada yang disinkronkan.Hashtable
tidak mengizinkannull
kunci atau nilai.HashMap
memungkinkan satunull
kunci dan sejumlahnull
nilai.Salah satu subclass HashMap adalah
LinkedHashMap
, jadi jika Anda menginginkan urutan iterasi yang dapat diprediksi (yang merupakan urutan penyisipan secara default), Anda dapat dengan mudah menukarHashMap
untuk aLinkedHashMap
. Ini tidak akan semudah jika Anda menggunakanHashtable
.Karena sinkronisasi bukan masalah bagi Anda, saya sarankan
HashMap
. Jika sinkronisasi menjadi masalah, Anda juga dapat melihatnyaConcurrentHashMap
.sumber
Collections.synchronizedMap()
.Hashtable
("menyinkronkan setiap metode harus menangani masalah konkurensi!") Membuatnya jauh lebih buruk untuk aplikasi berulir. Anda lebih baik menyinkronkan secara eksternalHashMap
(dan memikirkan konsekuensinya), atau menggunakanConcurrentMap
implementasi (dan mengeksploitasi API diperpanjang untuk konkurensi). Intinya: satu-satunya alasan untuk menggunakannyaHashtable
adalah ketika API lawas (mulai tahun 1996) mengharuskannya.Perhatikan, bahwa banyak jawaban menyatakan bahwa Hashtable disinkronkan. Dalam praktiknya ini sangat sedikit membeli Anda. Sinkronisasi yang ada pada metode accessor / mutator akan menghentikan dua utas menambahkan atau menghapus dari peta secara bersamaan, tetapi di dunia nyata Anda akan sering membutuhkan sinkronisasi tambahan.
Idiom yang sangat umum adalah "centang lalu taruh" - yaitu mencari entri di
Map
, dan menambahkannya jika belum ada. Ini sama sekali bukan operasi atom apakah Anda menggunakanHashtable
atauHashMap
.Sinkronisasi yang setara
HashMap
dapat diperoleh dengan:Tetapi untuk mengimplementasikan logika ini dengan benar, Anda perlu sinkronisasi tambahan dari formulir:
Sekalipun mengulangi
Hashtable
entri seseorang (atau yangHashMap
diperoleh olehCollections.synchronizedMap
) bukanlah utas aman kecuali Anda juga menjaga agarMap
tidak dimodifikasi melalui sinkronisasi tambahan.Implementasi
ConcurrentMap
antarmuka (misalnyaConcurrentHashMap
) menyelesaikan sebagian dari ini dengan memasukkan semantik periksa-lalu-bertindak semantik seperti:sumber
Hashtable
dianggap sebagai kode warisan. Tidak adaHashtable
yang tidak dapat dilakukan dengan menggunakanHashMap
atau derivasi dariHashMap
, jadi untuk kode baru, saya tidak melihat ada pembenaran untuk kembali keHashtable
.sumber
Pertanyaan ini sering ditanyakan dalam wawancara untuk memeriksa apakah kandidat memahami penggunaan kelas koleksi yang benar dan mengetahui solusi alternatif yang tersedia.
HashMap
kelas kira-kira setara denganHashtable
, kecuali bahwa itu non disinkronkan dan izin nulls. (HashMap
memungkinkan nilai nol sebagai kunci dan nilai sedangkanHashtable
tidak mengizinkannull
s).HashMap
tidak menjamin bahwa urutan peta akan tetap konstan seiring waktu.HashMap
tidak disinkronkan sedangkanHashtable
disinkronkan.HashMap
gagal-aman sementara enumerator untukHashtable
tidak dan membuangConcurrentModificationException
jika ada Thread lain memodifikasi peta secara struktural dengan menambahkan atau menghapus elemen apa pun kecuali metodeIterator
sendiriremove()
. Tapi ini bukan perilaku yang dijamin dan akan dilakukan oleh JVM pada upaya terbaik.Catatan tentang Beberapa Ketentuan Penting:
Hashtable
harus mendapatkan kunci pada objek sementara yang lain akan menunggu kunci akan dirilis.set
metode karena tidak mengubah koleksi "secara struktural". Namun, jika sebelum meneleponset
, koleksi tersebut telah dimodifikasi secara struktural,IllegalArgumentException
akan dibuang.HashMap
dapat disinkronkan olehMap m = Collections.synchronizeMap(hashMap);
Peta menyediakan tampilan Koleksi alih-alih dukungan langsung untuk iterasi melalui objek Enumerasi. Tampilan koleksi sangat meningkatkan ekspresifitas antarmuka, seperti yang akan dibahas nanti di bagian ini. Peta memungkinkan Anda untuk mengulangi kunci, nilai, atau pasangan nilai kunci;
Hashtable
tidak menyediakan opsi ketiga. Peta menyediakan cara yang aman untuk menghapus entri di tengah iterasi;Hashtable
tidak. Akhirnya, Map memperbaiki kekurangan kecil diHashtable
antarmuka.Hashtable
memiliki metode yang disebut berisi, yang mengembalikan true jikaHashtable
berisi nilai yang diberikan. Diberi nama, Anda akan mengharapkan metode ini mengembalikan true jikaHashtable
berisi kunci yang diberikan, karena kuncinya adalah mekanisme akses utama untuk aHashtable
. Antarmuka Peta menghilangkan sumber kebingungan ini dengan mengganti nama metodecontainsValue
. Juga, ini meningkatkan konsistensi antarmuka -containsValue
paralelcontainsKey
.sumber
set
operasi pada aHashMap
. 3)put(...)
Operasi tidak akan melemparIllegalArgumentException
jika ada perubahan sebelumnya. 4) Perilaku gagal cepatHashMap
juga terjadi jika Anda mengubah pemetaan. 5) Perilaku gagal-cepat yang dijamin. (Apa yang tidak dijamin adalah perilaku aHashTable
jika Anda melakukan modifikasi bersamaan. Perilaku sebenarnya adalah ... tidak dapat diprediksi.)Hashtable
tidak menjamin bahwa urutan elemen peta akan stabil dari waktu ke waktu. (Anda mungkin membingungkanHashtable
denganLinkedHashMap
.)thing.set(thing.get() + 1);
yang lebih sering mengejutkan pemula adalah benar-benar tidak terlindungi, terutama jikaget()
danset()
merupakan metode yang disinkronkan. Banyak dari mereka mengharapkan sihir.HashMap
: ImplementasiMap
antarmuka yang menggunakan kode hash untuk mengindeks array.Hashtable
: Hai, 1998 disebut. Mereka ingin API koleksi mereka kembali.Namun serius, Anda lebih baik menjauh dari
Hashtable
semuanya. Untuk aplikasi single-threaded, Anda tidak perlu overhead sinkronisasi tambahan. Untuk aplikasi yang sangat konkuren, sinkronisasi paranoid dapat menyebabkan kelaparan, kebuntuan, atau pengumpulan sampah yang tidak perlu dihentikan. Seperti yang ditunjukkan Tim Howland, Anda dapat menggunakannyaConcurrentHashMap
.sumber
Perlu diingat bahwa
HashTable
itu adalah kelas warisan sebelum Java Collections Framework (JCF) diperkenalkan dan kemudian dipasang kembali untuk mengimplementasikanMap
antarmuka. Begitu jugaVector
danStack
.Oleh karena itu, selalu menjauh dari mereka dalam kode baru karena selalu ada alternatif yang lebih baik di JCF seperti yang ditunjukkan orang lain.
Berikut adalah lembar contekan koleksi Java yang menurut Anda berguna. Perhatikan blok abu-abu berisi kelas warisan HashTable, Vector dan Stack.
sumber
Ada banyak jawaban bagus yang sudah diposting. Saya menambahkan beberapa poin baru dan merangkumnya.
HashMap
danHashtable
keduanya digunakan untuk menyimpan data dalam bentuk kunci dan nilai . Keduanya menggunakan teknik hashing untuk menyimpan kunci unik. Tetapi ada banyak perbedaan antara kelas HashMap dan Hashtable yang diberikan di bawah ini.HashMap
HashMap
tidak disinkronkan. Ini bukan utas aman dan tidak dapat dibagikan di antara banyak utas tanpa kode sinkronisasi yang tepat.HashMap
memungkinkan satu kunci nol dan beberapa nilai nol.HashMap
adalah kelas baru yang diperkenalkan di JDK 1.2.HashMap
cepat.HashMap
disinkronkan dengan memanggil kode iniMap m = Collections.synchronizedMap(HashMap);
HashMap
dilalui oleh Iterator.HashMap
adalah gagal-cepat.HashMap
mewarisi kelas AbstractMap.Hashtable
Hashtable
disinkronkan. Ini aman untuk thread dan dapat dibagikan dengan banyak utas.Hashtable
tidak mengizinkan kunci atau nilai nol.Hashtable
adalah kelas warisan.Hashtable
lambat.Hashtable
disinkronkan secara internal dan tidak dapat disinkronkan.Hashtable
dilalui oleh Enumerator dan Iterator.Hashtable
tidak gagal-cepat.Hashtable
mewarisi kelas Kamus.Bacaan lebih lanjut Apa perbedaan antara HashMap dan Hashtable di Java?
sumber
Selain apa yang dikatakan izb,
HashMap
memungkinkan nilai null, sedangkanHashtable
tidak.Perhatikan juga bahwa
Hashtable
memperluasDictionary
kelas, yang sebagai negara Javadocs , sudah usang dan telah digantikan olehMap
antarmuka.sumber
Lihatlah grafik ini. Ini memberikan perbandingan antara struktur data yang berbeda bersama dengan
HashMap
danHashtable
. Perbandingannya tepat, jelas dan mudah dimengerti.Matriks Koleksi Java
sumber
Hashtable
mirip denganHashMap
dan memiliki antarmuka yang serupa. Disarankan agar Anda menggunakanHashMap
, kecuali jika Anda memerlukan dukungan untuk aplikasi lawas atau Anda perlu sinkronisasi, karenaHashtables
metode disinkronkan. Jadi dalam kasus Anda karena Anda tidak multi-threading,HashMaps
adalah taruhan terbaik Anda.sumber
Perbedaan utama lainnya antara hashtable dan hashmap adalah bahwa Iterator di HashMap gagal-cepat sementara enumerator untuk Hashtable tidak dan membuang ConcurrentModificationException jika ada Thread lain yang memodifikasi peta secara struktural dengan menambahkan atau menghapus elemen apa pun kecuali metode hapus () dari Iterator sendiri. Tetapi ini bukan perilaku yang dijamin dan akan dilakukan oleh JVM pada upaya terbaik. "
Sumber saya: http://javarevisited.blogspot.com/2010/10/difference-between-hashmap-and.html
sumber
Di samping semua aspek penting lainnya yang telah disebutkan di sini, Collections API (misalnya antarmuka Peta) sedang dimodifikasi sepanjang waktu agar sesuai dengan tambahan "terbaru dan terbesar" untuk spesifikasi Java.
Misalnya, bandingkan iterasi Java 5 Map:
versus pendekatan Hashtable lama:
Di Jawa 1.8, kami juga berjanji untuk dapat membangun dan mengakses HashMaps seperti dalam bahasa skrip lama yang baik:
Perbarui: Tidak, mereka tidak akan mendarat di 1.8 ... :(
Apakah peningkatan koleksi Project Coin akan berada di JDK8?
sumber
Hashtable
disinkronkan, sedangkanHashMap
tidak. Itu membuatHashtable
lebih lambat dariHashmap
.Untuk aplikasi non-utas, gunakan
HashMap
karena tidak sama dalam hal fungsi.sumber
HashTable disinkronkan, jika Anda menggunakannya dalam satu utas, Anda dapat menggunakan HashMap , yang merupakan versi yang tidak disinkronkan. Objek yang tidak disinkronkan seringkali sedikit lebih berkinerja. Ngomong-ngomong jika beberapa utas mengakses HashMap secara bersamaan, dan setidaknya satu utas memodifikasi peta secara struktural, itu harus disinkronkan secara eksternal. Youn dapat membungkus peta yang tidak disinkronkan dengan yang disinkronkan menggunakan:
HashTable hanya dapat berisi objek non-null sebagai kunci atau sebagai nilai. HashMap dapat berisi satu kunci nol dan nilai nol.
Iterator yang dikembalikan oleh Map adalah gagal-cepat, jika peta secara struktural diubah kapan saja setelah iterator dibuat, dengan cara apa pun kecuali melalui metode hapus iterator sendiri, iterator akan melempar a
ConcurrentModificationException
. Dengan demikian, dalam menghadapi modifikasi bersamaan, iterator gagal dengan cepat dan bersih, daripada mengambil risiko perilaku non-deterministik yang sewenang-wenang pada waktu yang tidak ditentukan di masa depan. Sedangkan Enumerasi yang dikembalikan oleh metode kunci dan elemen Hashtable tidak cepat gagal.HashTable dan HashMap adalah anggota Java Collections Framework (sejak Java 2 platform v1.2, HashTable dipasang untuk mengimplementasikan antarmuka Peta).
HashTable dianggap sebagai kode lawas, dokumentasi menyarankan untuk menggunakan ConcurrentHashMap sebagai pengganti Hashtable jika diinginkan implementasi yang sangat konkuren yang aman secara bersamaan.
HashMap tidak menjamin urutan elemen dikembalikan. Untuk HashTable saya kira itu sama tetapi saya tidak sepenuhnya yakin, saya tidak menemukan sumber daya yang jelas menyatakan itu.
sumber
HashMap
danHashtable
memiliki perbedaan algoritmik yang signifikan juga. Tidak ada yang menyebutkan ini sebelumnya jadi itu sebabnya saya membawanya.HashMap
akan membuat tabel hash dengan kekuatan dua ukuran, meningkatkannya secara dinamis sehingga Anda memiliki paling banyak sekitar delapan elemen (tabrakan) di setiap bucket dan akan mengaduk elemen dengan sangat baik untuk tipe elemen umum. Namun demikianHashtable
penerapannya memberikan kontrol yang lebih baik dan lebih baik atas hashing jika Anda tahu apa yang Anda lakukan, yaitu Anda dapat memperbaiki ukuran tabel menggunakan misalnya bilangan prima terdekat dengan ukuran domain nilai Anda dan ini akan menghasilkan kinerja yang lebih baik daripada HashMap yaitu lebih sedikit tabrakan untuk beberapa kasus.Terpisah dari perbedaan nyata yang dibahas secara luas dalam pertanyaan ini, saya melihat Hashtable sebagai mobil "penggerak manual" di mana Anda memiliki kontrol yang lebih baik atas hashing dan HashMap sebagai mitra "penggerak otomatis" yang umumnya akan bekerja dengan baik.
sumber
Berdasarkan info di sini , saya akan merekomendasikan pergi dengan HashMap. Saya pikir keuntungan terbesar adalah bahwa Java akan mencegah Anda dari memodifikasinya saat Anda mengulanginya, kecuali Anda melakukannya melalui iterator.
sumber
A
Collection
- kadang-kadang disebut wadah - hanyalah sebuah objek yang mengelompokkan beberapa elemen menjadi satu unit.Collection
s digunakan untuk menyimpan, mengambil, memanipulasi, dan mengkomunikasikan data agregat. Kerangka kerja koleksi W adalah arsitektur terpadu untuk mewakili dan memanipulasi koleksi.The
HashMap
JDK1.2
dan HashtableJDK1.0
, keduanya digunakan untuk mewakili sekelompok objek yang diwakili<Key, Value>
berpasangan. Setiap<Key, Value>
pasangan disebutEntry
objek. Pengumpulan Entri disebut dengan objekHashMap
danHashtable
. Kunci dalam koleksi harus unik atau khas. [seperti yang digunakan untuk mengambil nilai yang dipetakan kunci tertentu. nilai dalam koleksi dapat diduplikasi.]« Anggota Superclass, Legacy and Collection Framework
Hashtable adalah kelas warisan yang diperkenalkan di
JDK1.0
, yang merupakan subkelas dari kelas Kamus. FromJDK1.2
Hashtable direkayasa ulang untuk mengimplementasikan antarmuka Peta untuk membuat anggota kerangka koleksi. HashMap adalah anggota Java Collection Framework sejak awal pendahuluannya diJDK1.2
. HashMap adalah subkelas dari kelas AbstractMap.« Kapasitas awal dan Load factor
Kapasitas adalah jumlah ember di tabel hash, dan kapasitas awal hanyalah kapasitas pada saat tabel hash dibuat. Perhatikan bahwa tabel hash terbuka: dalam kasus "
hash
collision
", satu ember menyimpan banyak entri, yang harus dicari secara berurutan. Load factor adalah ukuran seberapa penuh tabel hash diizinkan dapatkan sebelum kapasitasnya meningkat secara otomatis.HashMap membuat tabel hash kosong dengan kapasitas awal default (16) dan load factor default (0,75). Sedangkan Hashtable membangun hashtable kosong dengan kapasitas awal default (11) dan load factor / fill ratio (0,75).
« Modifikasi struktural dalam kasus tabrakan hash
HashMap
,Hashtable
dalam kasus tabrakan hash mereka menyimpan entri peta dalam daftar tertaut. Dari Java8 untukHashMap
jika hash bucket tumbuh melampaui ambang tertentu, ember itu akan beralih darilinked list of entries to a balanced tree
. yang meningkatkan kinerja kasus terburuk dari O (n) ke O (log n). Saat mengonversi daftar ke pohon biner, kode hash digunakan sebagai variabel percabangan. Jika ada dua kode hash yang berbeda dalam ember yang sama, satu dianggap lebih besar dan pergi ke kanan pohon dan yang lainnya ke kiri. Tetapi ketika kedua kode hash sama,HashMap
mengasumsikan bahwa kunci sebanding, dan membandingkan kunci untuk menentukan arah sehingga beberapa urutan dapat dipertahankan. Ini adalah praktik yang baik untuk membuat kunciHashMap
sebanding . Pada menambahkan entri jika ukuran ember mencapaiTREEIFY_THRESHOLD = 8
konversi daftar entri yang ditautkan ke pohon seimbang, pada penghapusan entri kurang dariTREEIFY_THRESHOLD
dan paling banyakUNTREEIFY_THRESHOLD = 6
akan mengubah pohon seimbang ke daftar entri yang ditautkan. Java 8 SRC , stackpost« Pengumpulan-lihat iterasi, Gagal-Cepat dan Gagal-Aman
Iterator
adalah gagal-cepat di alam. yaitu ia melempar ConcurrentModificationException jika koleksi diubah saat iterasi selain dari itu sendiri menghapus () metode. DimanaEnumeration
sifatnya aman-gagal. Itu tidak membuang pengecualian jika koleksi diubah saat iterasi.Menurut Java API Docs, Iterator selalu lebih disukai daripada Enumeration.
CATATAN: Fungsi antarmuka Enumerasi diduplikasi oleh antarmuka Iterator. Selain itu, Iterator menambahkan operasi penghapusan opsional, dan memiliki nama metode yang lebih pendek. Implementasi baru harus mempertimbangkan menggunakan Iterator dalam preferensi untuk Enumerasi.
Di Java 5 diperkenalkan Antarmuka ConcurrentMap :
ConcurrentHashMap
-ConcurrentMap
implementasi yang sangat konkuren, kinerja tinggi yang didukung oleh tabel hash. Implementasi ini tidak pernah memblokir ketika melakukan pengambilan dan memungkinkan klien untuk memilih tingkat konkurensi untuk pembaruan. Ini dimaksudkan sebagai pengganti drop-in untukHashtable
: selain menerapkanConcurrentMap
, ia mendukung semua metode "warisan" yang khasHashtable
.Setiap
HashMapEntry
nilai s adalah stabil sehingga memastikan konsistensi baik gandum untuk modifikasi berpendapat dan selanjutnya berbunyi; setiap pembacaan mencerminkan pembaruan yang paling baru selesaiIterator dan Enumeration Fail Safe - mencerminkan keadaan di beberapa titik sejak penciptaan iterator / enumerasi; ini memungkinkan pembacaan simultan dan modifikasi dengan biaya pengurangan konsistensi. Mereka tidak membuang ConcurrentModificationException. Namun, iterator dirancang hanya untuk digunakan oleh satu utas pada satu waktu.
Suka
Hashtable
tapi tidak sepertiHashMap
, kelas ini tidak mengizinkan null digunakan sebagai kunci atau nilai.« Null Keys Dan Null Values
HashMap
memungkinkan maksimum satu kunci nol dan sejumlah nilai nol. Dimana asHashtable
tidak memungkinkan bahkan satu kunci nol dan nilai nol, jika kunci atau nilai nol maka itu melempar NullPointerException. Contoh« Disinkronkan, Utas Aman
Hashtable
disinkronkan secara internal. Oleh karena itu, sangat aman untuk digunakanHashtable
dalam aplikasi multi-ulir. Dimana asHashMap
tidak disinkronkan secara internal. Oleh karena itu, tidak aman untuk digunakanHashMap
dalam aplikasi multi-ulir tanpa sinkronisasi eksternal. Anda dapat menyinkronkan secara eksternalHashMap
menggunakanCollections.synchronizedMap()
metode.« Performa
Seperti
Hashtable
disinkronkan secara internal, ini membuatHashtable
sedikit lebih lambat daripadaHashMap
.@Lihat
HashMap
di Jawa 8sumber
Untuk aplikasi berulir, Anda dapat sering pergi dengan ConcurrentHashMap- tergantung pada persyaratan kinerja Anda.
sumber
1.
Hashmap
danHashTable
keduanya menyimpan kunci dan nilai.2.
Hashmap
dapat menyimpan satu kunci sebagainull
.Hashtable
tidak bisa menyimpannull
.3.
HashMap
tidak disinkronkan tetapiHashtable
disinkronkan.4.
HashMap
dapat disinkronkan denganCollection.SyncronizedMap(map)
sumber
Terlepas dari perbedaan yang telah disebutkan, perlu dicatat bahwa sejak Java 8,
HashMap
secara dinamis menggantikan Node (daftar tertaut) yang digunakan dalam setiap bucket dengan TreeNodes (pohon merah-hitam), sehingga meskipun tabrakan hash tinggi ada, kasus terburuk saat pencarian adalahO (log (n)) untuk
HashMap
Vs O (n) diHashtable
.* Peningkatan tersebut belum diterapkan
Hashtable
, tapi hanya untukHashMap
,LinkedHashMap
, danConcurrentHashMap
.FYI, saat ini,
TREEIFY_THRESHOLD = 8
: jika ember berisi lebih dari 8 node, daftar tertaut diubah menjadi pohon seimbang.UNTREEIFY_THRESHOLD = 6
: ketika ember menjadi terlalu kecil (karena dihapus atau diubah ukurannya) pohon dikonversi kembali ke daftar tertaut.sumber
Ada 5 diferensiasi dasar dengan HashTable dan HashMaps.
sumber
Kontribusi kecil saya:
sumber
HashMap: Ini adalah kelas yang tersedia di dalam paket java.util dan digunakan untuk menyimpan elemen dalam format kunci dan nilai.
Hashtable: Ini adalah kelas warisan yang diakui di dalam kerangka koleksi.
sumber
HashTable adalah kelas warisan di jdk yang seharusnya tidak digunakan lagi. Ganti penggunaannya dengan ConcurrentHashMap . Jika Anda tidak memerlukan keamanan utas, gunakan HashMap yang bukan threadsafe tetapi lebih cepat dan menggunakan lebih sedikit memori.
sumber
Hashtable
disinkronkan sedangkanHashMap
tidak.HashMap
gagal-aman sedangkan enumerator untukHashtable
tidak. Jika Anda mengubah peta saat iterasi, Anda akan tahu.HashMap
mengizinkan nilai nol di dalamnya, sementaraHashtable
tidak.sumber
HashMap dan HashTable
1) Hashtable dan Hashmap mengimplementasikan antarmuka java.util.Map 2) Baik Hashmap dan Hashtable adalah koleksi berbasis hash. dan mengerjakan hashing. jadi ini adalah kesamaan dari HashMap dan HashTable.
1) Perbedaan pertama adalah HashMap bukan thread aman Sementara HashTable adalah ThreadSafe
2) HashMap adalah kinerja yang lebih baik karena tidak aman thread. sementara performa Hashtable tidak lebih baik karena aman untuk thread. jadi beberapa utas tidak dapat mengakses Hashtable secara bersamaan.
sumber
Hashtable:
Hashtable adalah struktur data yang mempertahankan nilai pasangan kunci-nilai. Itu tidak mengizinkan nol untuk kunci dan nilai. Anda akan mendapatkan
NullPointerException
jika Anda menambahkan nilai nol. Ini disinkronkan. Jadi itu datang dengan biayanya. Hanya satu utas yang dapat mengakses HashTable pada waktu tertentu.Contoh :
HashMap:
HashMap seperti Hashtable tetapi juga menerima pasangan nilai kunci. Memungkinkan null untuk kunci dan nilai-nilai. Kinerjanya lebih baik lebih baik daripada
HashTable
, karena memang demikianunsynchronized
.Contoh:
sumber
HashMap
ditiru dan karena itu dapat digunakanGWT client code
sedangkanHashtable
tidak.sumber
Topik lama dan klasik, hanya ingin menambahkan blog bermanfaat ini yang menjelaskan ini:
http://blog.manishchhabra.com/2012/08/the-5-main-differences-betwen-hashmap-and-hashtable/
Blog oleh Manish Chhabra
sumber
HashMap dan Hashtable keduanya digunakan untuk menyimpan data dalam bentuk kunci dan nilai. Keduanya menggunakan teknik hashing untuk menyimpan kunci unik. ut ada banyak perbedaan antara kelas HashMap dan Hashtable yang diberikan di bawah ini.
sumber