Pendahuluan Peta
Petakan kunci ke objek nilai. Peta tidak dapat berisi tombol duplikat; Setiap kunci hanya dapat memetakan satu nilai paling banyak. Antarmuka ini menggantikan kelas kamus, yang sepenuhnya merupakan kelas abstrak, bukan antarmuka.
Antarmuka peta menyediakan tiga tampilan koleksi yang memungkinkan melihat konten peta dalam bentuk set kunci, set nilai, atau set hubungan pemetaan nilai kunci. Urutan pemetaan didefinisikan sebagai urutan di mana iterator mengembalikan elemennya pada tampilan koleksi peta. Beberapa implementasi pemetaan secara eksplisit menjamin pesanan mereka, seperti kelas TreeMap; Orang lain tidak menjamin pesanan mereka, seperti kelas hashmap.
Catatan: Perawatan ekstra harus diambil saat menggunakan objek yang dapat berubah sebagai kunci pemetaan. Ketika suatu objek adalah kunci dalam peta, jika nilai objek diubah dengan cara yang mempengaruhi perbandingan yang sama, perilaku peta tidak pasti. Kasus khusus yang dilarang ini adalah bahwa peta tidak memungkinkan dirinya untuk dimasukkan sebagai kunci. Meskipun peta diizinkan untuk memasukkan dirinya sebagai nilai, hati -hati: definisi metode yang sama dan kode hash tidak akan lagi eksplisit pada peta tersebut.
Antarmuka peta:
Peta menyediakan pemetaan dari kunci ke nilai. Peta tidak dapat berisi kunci yang sama, dan setiap kunci hanya dapat memetakan satu nilai. Antarmuka peta menyediakan tiga jenis tampilan koleksi. Konten peta dapat dianggap sebagai satu set koleksi kunci, satu set koleksi nilai, atau satu set pemetaan nilai kunci.
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", bilangan bulat baru (1)); number.put ("dua", bilangan bulat baru (2)); number.put ("tiga", integer 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. , tetapi 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.
Kelas WeakHashMap
Lemari Hashmap adalah hashmap yang lebih baik yang mengimplementasikan "referensi lemah" ke kunci. Jika kunci tidak lagi dirujuk secara eksternal, kunci dapat didaur ulang oleh GC.
Di atas adalah pengantar antarmuka peta java. Siswa yang belajar pemrograman Java dapat merujuknya.