1. Perbedaan antara hashmap dan hashtable
Pertama -tama mari kita lihat definisi dua kelas
Hashtable kelas publik memperluas kamus mengimplementasikan peta, kloning, java.io.serializable
hashmap kelas publik memperluas abstrak abstrak implementasi peta, dapat dikloning, serializable
Dapat dilihat bahwa hashtable mewarisi dari kamus dan hashmap mewarisi dari abstractmap
Metode put hashtable adalah sebagai berikut
Public Synchronized V Put (K key, V Nilai) {// ########## KATAKAN DI SINI 1 // Pastikan nilainya tidak null if (value == null) {// ###### KATAKAN Di sini 2 Lemparkan nullPointerException baru (); } // Pastikan kuncinya belum ada di hashtable. Tab entri [] = tabel; int hash = key.hashCode (); // ######## Catatan di sini 3 int index = (hash & 0x7fffffff) % tab.length; untuk (entri e = tab [indeks]; e! = null; e = e.next) {if ((e.hash == hash) && e.key.equals (key)) {v old = e.value; E.Value = nilai; kembali tua; }} modcount ++; if (count> = threshold) {// Rehash tabel jika ambang batas terlampaui rehash (); tab = tabel; index = (hash & 0x7fffffff) % tab.length; } // Membuat entri baru. Entri e = tab [indeks]; tab [indeks] = entri baru (hash, kunci, nilai, e); Count ++; kembali nol; } Catatan 1 Metode ini sinkron
Catatan 2 Metode tidak mengizinkan nilai == null
Catatan 3 Metode ini memanggil metode kode hashcode dari kunci. Jika kunci == NULL, pengecualian pointer nol akan dilemparkan. Metode put hashmap adalah sebagai berikut.
public v put (Key k, nilai v) {// ########## CATATAN Di sini 1 if (key == null) // ######## KATAKAN Di sini 2 return putfornullkey (nilai); int hash = hash (key.hashcode ()); int i = indexfor (hash, table.length); untuk (entri e = tabel [i]; e! = null; e = e.next) {objek k; if (e.hash == hash && ((k = e.key) == key || key.equals (k))) {v oldValue = E.Value; E.Value = nilai; E.RecordAccess (ini); Kembalikan OldValue; }} modcount ++; addentry (hash, kunci, nilai, i); // ######## CATATAN di sini Return null; } Catatan 1 Metode ini tidak sinkron
CATATAN 2 METODE memungkinkan kunci == null
Catatan 3 Metode tidak membuat panggilan ke nilai, sehingga diizinkan menjadi nol.
Mengisi kembali:
Hashtable memiliki metode berisi, yang dapat dengan mudah menyebabkan kesalahpahaman, sehingga telah dihapus dalam hashmap.
Tentu saja, kedua kelas menggunakan metode ContainsKey dan ContainsValue.
| Hashmap | Hashtable | |
| Kelas induk | AbstractMap | Kamus |
| Apakah itu disinkronkan | TIDAK | Ya |
| k, can v null | Ya | TIDAK |
HashMap adalah implementasi ringan dari hashtable (implementasi non-thread-safe). Mereka semua menyelesaikan antarmuka peta. Perbedaan utama adalah bahwa hashmap memungkinkan kunci nol. Karena tidak aman, mungkin lebih efisien daripada hashtable.
HashMap memungkinkan null sebagai kunci atau nilai entri, sedangkan hashtable tidak.
Hashmap menghapus metode hashtable berisi metode dan mengubahnya menjadi nilai dan berisiKey. Karena metode berisi mudah untuk menyebabkan kesalahpahaman.
Hashtable mewarisi dari kelas kamus, dan hashmap adalah implementasi antarmuka peta yang diperkenalkan oleh Java 1.2.
Perbedaan terbesar adalah bahwa metode hashtable disinkronkan, sedangkan hashmap tidak. Ketika beberapa utas mengakses hashtable, mereka tidak perlu menyinkronkan untuk metodenya sendiri, dan hashmap harus memberikan sinkronisasi eksternal (collections.ynchronizedMap).
Algoritma hash/rehash yang digunakan oleh hashtable dan hashmap kira -kira sama, sehingga tidak akan ada perbedaan besar dalam kinerja.
Meringkaskan:
Nilai -nilai kunci dalam hashmap dibiarkan kosong dan tidak sinkron
Nilai kunci dalam hashtable tidak diperbolehkan menjadi nol dan disinkronkan
Warisan berbeda, tetapi keduanya mengimplementasikan antarmuka peta
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.