Panduan untuk Peta Jambu Batu

1. Gambaran keseluruhan

Dalam tutorial ini, kami akan menunjukkan cara menggunakan antara muka BiMap Google Guava dan pelbagai pelaksanaannya.

A BiMap (atau "peta dwiarah") adalah sejenis khas Peta yang mengekalkan pandangan songsang peta sementara memastikan tiada nilai pendua hadir dan nilai yang sentiasa boleh digunakan dengan selamat untuk kembali utama.

Pelaksanaan dasar BiMap adalah HashBiMap di mana secara dalaman ia menggunakan dua Peta , satu untuk pemetaan nilai dan satu lagi untuk pemetaan nilai ke kunci.

2. BiMap Google Guava

Mari lihat bagaimana menggunakan kelas BiMap .

Kita akan mulakan dengan menambahkan kebergantungan perpustakaan Jambu Batu di pom.xml :

 com.google.guava guava 21.0 

Versi ketergantungan terkini boleh diperiksa di sini.

3. Membuat BiMap

Anda boleh membuat contoh BiMap dengan pelbagai cara seperti berikut:

  • Sekiranya anda akan berurusan dengan objek Java khusus, gunakan kaedah buat dari kelas HashBiMap:
BiMap capitalCountryBiMap = HashBiMap.create();
  • Jika kita sudah mempunyai peta yang sedia ada, anda boleh membuat satu contoh yang BiMap menggunakan versi beban daripada mencipta kaedah dari kelas HashBiMap :
Map capitalCountryBiMap = new HashMap(); //... HashBiMap.create(capitalCountryBiMap); 
  • Sekiranya anda berurusan dengan kunci jenis Enum, gunakan kaedah buat dari kelas EnumHashBiMap :
BiMap operationStringBiMap = EnumHashBiMap.create(MyEnum.class); 
  • Sekiranya anda berhasrat untuk membuat peta yang tidak berubah, gunakan kelas ImmutableBiMap (yang mengikuti corak pembangun):
BiMap capitalCountryBiMap = new ImmutableBiMap.Builder() .put("New Delhi", "India") .build(); 

4. Menggunakan BiMap

Mari kita mulakan dengan contoh sederhana yang menunjukkan penggunaan BiMap, di mana kita boleh mendapatkan kunci berdasarkan nilai dan nilai berdasarkan kunci:

@Test public void givenBiMap_whenQueryByValue_shouldReturnKey() { BiMap capitalCountryBiMap = HashBiMap.create(); capitalCountryBiMap.put("New Delhi", "India"); capitalCountryBiMap.put("Washington, D.C.", "USA"); capitalCountryBiMap.put("Moscow", "Russia"); String keyFromBiMap = capitalCountryBiMap.inverse().get("Russia"); String valueFromBiMap = capitalCountryBiMap.get("Washington, D.C."); assertEquals("Moscow", keyFromBiMap); assertEquals("USA", valueFromBiMap); }

Catatan: kaedah songsang di atas mengembalikan pandangan songsang BiMap , yang memetakan setiap nilai BiMap ke kunci yang berkaitan.

BiMap melemparkan IllegalArgumentException apabila kami cuba menyimpan nilai pendua dua kali.

Mari lihat contoh yang sama:

@Test(expected = IllegalArgumentException.class) public void givenBiMap_whenSameValueIsPresent_shouldThrowException() { BiMap capitalCountryBiMap = HashBiMap.create(); capitalCountryBiMap.put("Mumbai", "India"); capitalCountryBiMap.put("Washington, D.C.", "USA"); capitalCountryBiMap.put("Moscow", "Russia"); capitalCountryBiMap.put("New Delhi", "India"); } 

Sekiranya kita ingin mengesampingkan nilai yang sudah ada dalam BiMap , kita dapat menggunakan kaedah forcePut :

@Test public void givenSameValueIsPresent_whenForcePut_completesSuccessfully() { BiMap capitalCountryBiMap = HashBiMap.create(); capitalCountryBiMap.put("Mumbai", "India"); capitalCountryBiMap.put("Washington, D.C.", "USA"); capitalCountryBiMap.put("Moscow", "Russia"); capitalCountryBiMap.forcePut("New Delhi", "India"); assertEquals("USA", capitalCountryBiMap.get("Washington, D.C.")); assertEquals("Washington, D.C.", capitalCountryBiMap.inverse().get("USA")); }

5. Kesimpulan

Dalam tutorial ringkas ini, kami menggambarkan contoh penggunaan BiMap di perpustakaan Jambu. Ini digunakan untuk mendapatkan kunci berdasarkan nilai dari peta.

Pelaksanaan contoh-contoh ini dapat dijumpai dalam projek GitHub - ini adalah projek berasaskan Maven, jadi mudah untuk diimport dan dijalankan sebagaimana adanya.