Kerangka kerja Java Collections menyediakan sekumpulan kelas koleksi. Setiap kelas memiliki kekuatan dan kelemahan kinerja sendiri. Beberapa kelas menyediakan implementasi penuh yang dapat digunakan apa adanya. Lainnya adalah abstrak yang menyediakan implementasi kerangka yang digunakan sebagai titik awal untuk membuat koleksi. Implementasi koleksi menggunakan framework disinkronkan-pembungkus untuk menyediakan kelas disinkronkan, jika tidak implementasi tidak disinkronkan. Beberapa kelas menyediakan implementasi antarmuka peta.
Platform Java berisi tiga implementasi Peta tujuan umum: HashMap, TreeMap, dan LinkedHashMap. HashMap dan Hashtable adalah dua koleksi di Jawa yang digunakan untuk menyimpan pasangan kunci / nilai dalam tabel hash. Hashtable adalah Peta yang disinkronkan dan HashMap adalah Peta yang tidak disinkronkan. Namun demikian, jika Anda perlu menggunakan Peta yang disinkronkan, Hashtable lebih cepat daripada menggunakan HashMap dalam pembungkus yang disinkronkan. Keduanya merupakan koleksi berbasis hash di Jawa tetapi mereka memiliki perbedaan yang adil. Kami menyoroti beberapa perbedaan utama antara keduanya untuk membantu Anda lebih memahami istilah-istilah tersebut.
HashMap adalah implementasi Peta berdasarkan tabel hash yang memberikan kinerja waktu-konstan untuk memasukkan dan menemukan pasangan. Kelas HashMap menyediakan implementasi peta yang didasarkan pada struktur data Hashtable. Implementasi ini mendukung semua operasi Peta dan memungkinkan beberapa nilai null tetapi hanya satu kunci null. Ini menggunakan pasangan kunci / nilai untuk menyimpan nilai dalam tabel hash. Ini adalah Peta yang tidak disinkronkan yang artinya bukan aman-utas dan tidak dapat dibagikan di antara banyak utas tanpa sinkronisasi yang tepat.
Tidak seperti HashMap, Hashtable adalah Peta yang disinkronkan dan ini adalah thread-safe yang berarti dapat dibagi antara beberapa utas. Di Hashtable, Anda menentukan objek yang bisa digunakan sebagai kunci dan nilai yang menyertai kunci. A Hashtable memetakan kunci ke nilai dengan bantuan fungsi hash. Java menyediakan fungsi ini dalam bentuk metode kode hash () objek, yang dikesampingkan kelas untuk memberikan kode hash yang sesuai. Tidak seperti HashMap, Hashtable tidak mendukung nilai nol dan kunci nol karena ada pemeriksaan nol dalam penerapan metode put Hashtable.
Keduanya adalah koleksi berbasis hash di Jawa yang digunakan untuk menyimpan data dalam pasangan kunci / nilai. HashMap adalah implementasi Peta berdasarkan tabel hash yang memberikan kinerja waktu-konstan untuk memasukkan dan menemukan pasangan. Kinerja dapat disesuaikan dengan penggunaan konstruktor yang memungkinkan Anda untuk mengatur kapasitas dan memuat faktor tabel hash. Hashtable dasar sangat mirip dengan HashMap, bahkan pada nama metode. Ini menyimpan pasangan kunci / nilai dalam tabel hash. Di Hashtable, Anda menentukan objek yang bisa digunakan sebagai kunci dan nilai yang menyertai kunci.
HashMap dan Hashtable menggunakan teknik hashing untuk menyimpan nilai berdasarkan kunci. Seperti HashMap, Hashtable menggunakan pasangan kunci / nilai untuk menyimpan nilai dalam tabel hash. Namun, perbedaan utama antara keduanya adalah sinkronisasi. HashMap adalah Peta yang tidak disinkronkan sedangkan Hashtable adalah Peta yang disinkronkan. Ini berarti HashMap tidak aman-utas dan tidak dapat dibagikan di antara banyak utas tanpa kode sinkronisasi yang tepat. Sebaliknya, Hashtable aman untuk digunakan dan dapat digunakan di antara banyak utas. Hashtable lebih cepat daripada menggunakan HashMap dalam pembungkus yang disinkronkan, jika Anda perlu menggunakan Peta yang disinkronkan.
Kelas HashMap menyediakan implementasi peta yang didasarkan pada struktur data Hashtable. Implementasi ini mendukung semua operasi Peta dan memungkinkan beberapa nilai null tetapi hanya satu kunci null sehingga dapat mempertahankan properti kunci yang unik. Namun, itu tidak membuat jaminan pada urutan di mana entri disimpan. Hashtable, di sisi lain, memetakan kunci ke nilai dengan bantuan fungsi hash. Tidak seperti HashMap, Hashtable tidak mendukung nilai nol dan kunci nol karena ada pemeriksaan nol dalam penerapan metode put Hashtable.
Karena HashMap bukan Peta yang disinkronkan, itu jauh lebih cepat dan lebih baik daripada Hashtable dalam hal kinerja, dan pada kenyataannya, menggunakan lebih sedikit memori daripada Hashtable. Meskipun mereka hampir identik, Hashtable sedikit lebih lambat dari HashMap tetapi lebih cepat dari HashMap yang disinkronkan. Secara inheren, tidak aman untuk menggunakan Hashtable dengan akses multithreaded karena hanya metode yang disinkronkan. Hashtable adalah rekanan yang disinkronkan ke HashMap. Objek yang tidak disinkronkan berperforma lebih baik bila dibandingkan dengan objek yang disinkronkan seperti Hashtable berkinerja lebih baik dalam lingkungan berulir tunggal.
Kelas HashMap memberi Anda Peta yang tidak disortir dan tidak berurutan. Jadi ketika Anda membutuhkan Peta dan Anda tidak peduli tentang urutan penyimpanan entri, maka HashMap adalah cara untuk pergi.
Hashtable, seperti halnya Vector, telah ada sejak zaman Jawa prasejarah. Sama seperti Vector adalah mitra yang disinkronkan ke ArrayList yang lebih modern dan canggih, Hashtable adalah mitra yang disinkronkan ke HashMap. Namun, suatu kelas tidak dapat disinkronkan, jadi ketika kita mengatakan bahwa Hashtable adalah Peta yang disinkronkan, itu berarti bahwa metode kunci dari kelas disinkronkan.
Meskipun keduanya hampir identik, perbedaannya terletak pada cara mereka disinkronkan dan bagaimana kinerjanya. HashMap berkinerja lebih baik di lingkungan multi-utas sedangkan Hashtable berperforma lebih baik di lingkungan utas tunggal.