Kelas hashtable
Hashtable mewarisi antarmuka peta dan mengimplementasikan tabel hash dengan pemetaan nilai kunci. Objek non-nol dapat digunakan sebagai kunci atau nilai.
Gunakan put (tombol, nilai) untuk menambahkan data, gunakan GET (Key) untuk mengambil data. Waktu overhead dari dua operasi dasar ini adalah konstan.
Hashtable menyesuaikan kinerja melalui parameter kapasitas dan faktor beban awal. Biasanya, faktor beban default 0,75 dapat mencapai keseimbangan waktu dan ruang. Meningkatkan faktor beban dapat menghemat ruang tetapi waktu pencarian yang sesuai akan meningkat, yang akan mempengaruhi operasi seperti Get and Put.
Contoh sederhana menggunakan hashtable adalah sebagai berikut: put 1, 2, dan 3 ke dalam hashtable, dan kunci mereka adalah "satu", "dua", "tiga" masing -masing:
Hashtable number = hashtable baru (); number.put ("satu", integer baru (1)); number.put ("dua", bilangan bulat baru (2)); number.put ("tiga", bilangan bulat baru (3));Untuk mengeluarkan angka, seperti 2, gunakan kunci yang sesuai:
Integer n = (integer) numbers.get ("dua"); System.out.println ("dua =" + n);Karena suatu objek sebagai kunci akan menentukan posisi nilai yang sesuai dengan menghitung fungsi hashnya, objek apa pun sebagai kunci harus mengimplementasikan kode hash dan sama dengan metode. Kode hashcode dan sama dengan metode yang diwariskan dari objek kelas root. Jika Anda menggunakan kelas khusus sebagai kunci, berhati -hatilah. Menurut definisi fungsi hash, jika kedua objek tersebut sama, yaitu, Obj1.Equals (OBJ2) = Benar, kode hash mereka harus sama, tetapi jika kedua objek tersebut berbeda, kode hash mereka mungkin tidak berbeda. Jika kode hash dari dua objek yang berbeda adalah sama, fenomena ini disebut konflik. Konflik akan meningkatkan waktu overhead pengoperasian tabel hash. Oleh karena itu, cobalah untuk mendefinisikan metode hashcode () untuk mempercepat pengoperasian tabel hash.
Jika objek yang sama memiliki kode hash yang berbeda, operasi pada tabel hash akan memiliki hasil yang tidak terduga (metode get yang diharapkan mengembalikan nol). Untuk menghindari masalah ini, Anda hanya perlu mengingat satu hal: Anda harus menulis ulang metode Equals dan HashCode pada saat yang sama, daripada hanya menulis salah satunya.
Hashtable disinkronkan.
Kelas hashmap
HashMap mirip dengan hashtable, perbedaannya adalah hashmap asinkron dan memungkinkan nol, yaitu nilai nol dan kunci nol. Namun, ketika hashmap dianggap sebagai koleksi (metode nilai () dapat mengembalikan koleksi), overhead waktu sub -operasi berulang sebanding dengan kapasitas hashmap. Oleh karena itu, jika kinerja operasi iterasi sangat penting, jangan atur kapasitas inisialisasi hashmap menjadi terlalu tinggi atau faktor beban terlalu rendah.
Meringkaskan