Saya memiliki data yang diatur dalam format "kunci-kunci", bukan "nilai-kunci". Ini seperti HashMap, tetapi saya membutuhkan pencarian O (1) di kedua arah. Apakah ada nama untuk tipe struktur data ini, dan apakah yang seperti ini termasuk dalam pustaka standar Java? (atau mungkin Apache Commons?)
Saya bisa menulis kelas saya sendiri yang pada dasarnya menggunakan dua Peta yang dicerminkan, tetapi saya lebih suka tidak menemukan kembali roda (jika ini sudah ada tetapi saya tidak mencari istilah yang tepat).
Selain Apache Commons, Guava juga memiliki BiMap .
sumber
Ini adalah kelas sederhana yang saya gunakan untuk menyelesaikan ini (saya tidak ingin memiliki ketergantungan pihak ketiga lagi). Itu tidak menawarkan semua fitur yang tersedia di Maps tetapi ini adalah awal yang baik.
sumber
Jika tidak ada tabrakan, Anda selalu dapat menambahkan kedua arah ke HashMap yang sama :-)
sumber
Ini 2 sen saya.
Atau Anda dapat menggunakan metode sederhana dengan obat generik. Sepotong kue.
Tentunya Anda harus memiliki peta dengan nilai yang unik. Jika tidak, salah satunya akan diganti.
sumber
Terinspirasi oleh jawaban GETah, saya memutuskan untuk menulis sesuatu yang serupa sendiri dengan beberapa perbaikan:
Map<K,V>
-Interfaceput
(setidaknya saya berharap dapat menjaminnya dengan ini)Penggunaannya seperti peta biasa, untuk mendapatkan tampilan terbalik pada panggilan pemetaan
getReverseView()
. Konten tidak disalin, hanya tampilan yang dikembalikan.Saya tidak yakin ini benar-benar bukti yang bodoh (sebenarnya, mungkin tidak), jadi silakan berkomentar jika Anda melihat ada kekurangan dan saya akan memperbarui jawabannya.
sumber
Pertanyaan yang cukup lama di sini, tetapi jika orang lain mengalami penyumbatan otak seperti yang baru saja saya lakukan dan tersandung pada hal ini, semoga ini dapat membantu.
Saya juga sedang mencari HashMap dua arah, terkadang itu adalah jawaban paling sederhana yang paling berguna.
Jika Anda tidak ingin menemukan kembali roda dan memilih untuk tidak menambahkan pustaka atau proyek lain ke proyek Anda, bagaimana dengan implementasi sederhana dari array paralel (atau ArrayLists jika desain Anda menuntutnya).
Segera setelah Anda mengetahui indeks salah satu dari dua kunci, Anda dapat dengan mudah meminta yang lain. Jadi metode pencarian Anda bisa terlihat seperti:
Ini mengasumsikan Anda menggunakan struktur berorientasi objek yang tepat, di mana hanya metode yang memodifikasi array / ArrayLists ini, akan sangat mudah untuk membuatnya tetap paralel. Bahkan lebih mudah untuk ArrayList karena Anda tidak perlu membangun kembali jika ukuran array berubah, selama Anda menambahkan / menghapus secara bersamaan.
sumber