Panduan Jadual Jambu Batu

1. Gambaran keseluruhan

Dalam tutorial ini, kami akan menunjukkan cara menggunakan antara muka Jadual Jambu Batu Google dan pelbagai pelaksanaannya.

Jambu batu ini Jadual adalah koleksi yang mewakili meja seperti struktur yang mengandungi baris, lajur dan nilai sel yang berkaitan. Baris dan lajur bertindak sebagai sepasang kekunci yang disusun.

2. Jadual Jambu Batu Google

Mari kita lihat cara menggunakan kelas Table .

2.1. Ketergantungan Maven

Mari mulakan dengan menambahkan kebergantungan perpustakaan Jambu biji Google di pom.xml :

 com.google.guava guava 29.0-jre 

Versi ketergantungan terkini boleh diperiksa di sini.

2.2. Mengenai

Sekiranya kita mewakili Jadual Jambu Batu menggunakan Koleksi yang ada di inti Java, maka strukturnya akan menjadi peta baris di mana setiap baris berisi peta lajur dengan nilai sel yang terkait.

Jadual mewakili peta khas di mana dua kunci dapat ditentukan secara gabungan untuk merujuk kepada satu nilai.

Ini serupa dengan membuat peta peta, misalnya, Peta . Table juga merupakan cara yang sempurna untuk mewakili papan permainan Battleships.

3. Membuat

Anda boleh membuat contoh Jadual dengan pelbagai cara:

  • Menggunakan kaedah buat dari kelas HashBasedTable yang menggunakan LinkedHashMap secara dalaman:
    Table universityCourseSeatTable = HashBasedTable.create();
  • Sekiranya kita memerlukan Jadual yang kekunci baris dan kekunci lajur perlu disusun mengikut susunan semula jadi atau dengan membekalkan pembanding, anda boleh membuat contoh Jadual menggunakan kaedah buat dari kelas yang disebut TreeBasedTable , yang menggunakan TreeMap secara dalaman:
    Table universityCourseSeatTable = TreeBasedTable.create(); 
  • Sekiranya kita mengetahui kekunci baris dan kekunci lajur terlebih dahulu dan ukuran jadualnya tetap, gunakan kaedah buat dari kelas ArrayTable :
    List universityRowTable = Lists.newArrayList("Mumbai", "Harvard"); List courseColumnTables = Lists.newArrayList("Chemical", "IT", "Electrical"); Table universityCourseSeatTable = ArrayTable.create(universityRowTable, courseColumnTables); 
  • Sekiranya kita berhasrat untuk membuat contoh Jadual yang tidak berubah yang data dalamannya tidak akan pernah berubah, gunakan kelas ImmutableTable (membuat yang mengikuti corak pembangun):
    Table universityCourseSeatTable = ImmutableTable. builder() .put("Mumbai", "Chemical", 120).build(); 

4. Menggunakan

Mari kita mulakan dengan contoh ringkas yang menunjukkan penggunaan Jadual .

4.1. Pengambilan

Sekiranya kita mengetahui kekunci baris dan kekunci lajur maka kita dapat memperoleh nilai yang berkaitan dengan baris dan kekunci lajur:

@Test public void givenTable_whenGet_returnsSuccessfully() { Table universityCourseSeatTable = HashBasedTable.create(); universityCourseSeatTable.put("Mumbai", "Chemical", 120); universityCourseSeatTable.put("Mumbai", "IT", 60); universityCourseSeatTable.put("Harvard", "Electrical", 60); universityCourseSeatTable.put("Harvard", "IT", 120); int seatCount = universityCourseSeatTable.get("Mumbai", "IT"); Integer seatCountForNoEntry = universityCourseSeatTable.get("Oxford", "IT"); assertThat(seatCount).isEqualTo(60); assertThat(seatCountForNoEntry).isEqualTo(null); }

4.2. Memeriksa Penyertaan

Kami dapat memeriksa kehadiran entri dalam Jadual berdasarkan:

  • Kekunci baris
  • Kekunci lajur
  • Kekunci baris dan kekunci lajur
  • Nilai

Mari lihat bagaimana memeriksa kehadiran entri:

@Test public void givenTable_whenContains_returnsSuccessfully() { Table universityCourseSeatTable = HashBasedTable.create(); universityCourseSeatTable.put("Mumbai", "Chemical", 120); universityCourseSeatTable.put("Mumbai", "IT", 60); universityCourseSeatTable.put("Harvard", "Electrical", 60); universityCourseSeatTable.put("Harvard", "IT", 120); boolean entryIsPresent = universityCourseSeatTable.contains("Mumbai", "IT"); boolean courseIsPresent = universityCourseSeatTable.containsColumn("IT"); boolean universityIsPresent = universityCourseSeatTable.containsRow("Mumbai"); boolean seatCountIsPresent = universityCourseSeatTable.containsValue(60); assertThat(entryIsPresent).isEqualTo(true); assertThat(courseIsPresent).isEqualTo(true); assertThat(universityIsPresent).isEqualTo(true); assertThat(seatCountIsPresent).isEqualTo(true); }

4.3. Penyingkiran

Kita boleh membuang entri dari Jadual dengan memberikan kunci baris dan kekunci lajur:

@Test public void givenTable_whenRemove_returnsSuccessfully() { Table universityCourseSeatTable = HashBasedTable.create(); universityCourseSeatTable.put("Mumbai", "Chemical", 120); universityCourseSeatTable.put("Mumbai", "IT", 60); int seatCount = universityCourseSeatTable.remove("Mumbai", "IT"); assertThat(seatCount).isEqualTo(60); assertThat(universityCourseSeatTable.remove("Mumbai", "IT")). isEqualTo(null); } 

4.4. Kunci Baris untuk Peta Nilai Sel

Kita boleh mendapatkan perwakilan Peta dengan kunci sebagai baris dan nilai sebagai Nilai Sel dengan memberikan kunci lajur:

@Test public void givenTable_whenColumn_returnsSuccessfully() { Table universityCourseSeatTable = HashBasedTable.create(); universityCourseSeatTable.put("Mumbai", "Chemical", 120); universityCourseSeatTable.put("Mumbai", "IT", 60); universityCourseSeatTable.put("Harvard", "Electrical", 60); universityCourseSeatTable.put("Harvard", "IT", 120); Map universitySeatMap = universityCourseSeatTable.column("IT"); assertThat(universitySeatMap).hasSize(2); assertThat(universitySeatMap.get("Mumbai")).isEqualTo(60); assertThat(universitySeatMap.get("Harvard")).isEqualTo(120); } 

4.5. Perwakilan Peta Jadual

Kita boleh mendapatkan Peta perwakilan dengan menggunakan kaedah columnMap :

@Test public void givenTable_whenColumnMap_returnsSuccessfully() { Table universityCourseSeatTable = HashBasedTable.create(); universityCourseSeatTable.put("Mumbai", "Chemical", 120); universityCourseSeatTable.put("Mumbai", "IT", 60); universityCourseSeatTable.put("Harvard", "Electrical", 60); universityCourseSeatTable.put("Harvard", "IT", 120); Map
    
      courseKeyUniversitySeatMap = universityCourseSeatTable.columnMap(); assertThat(courseKeyUniversitySeatMap).hasSize(3); assertThat(courseKeyUniversitySeatMap.get("IT")).hasSize(2); assertThat(courseKeyUniversitySeatMap.get("Electrical")).hasSize(1); assertThat(courseKeyUniversitySeatMap.get("Chemical")).hasSize(1); } 
    

4.6. Kunci Lajur untuk Peta Nilai Sel

Kita boleh mendapatkan perwakilan Peta dengan kunci sebagai lajur dan nilai sebagai Nilai Sel dengan memberikan kunci baris:

@Test public void givenTable_whenRow_returnsSuccessfully() { Table universityCourseSeatTable = HashBasedTable.create(); universityCourseSeatTable.put("Mumbai", "Chemical", 120); universityCourseSeatTable.put("Mumbai", "IT", 60); universityCourseSeatTable.put("Harvard", "Electrical", 60); universityCourseSeatTable.put("Harvard", "IT", 120); Map courseSeatMap = universityCourseSeatTable.row("Mumbai"); assertThat(courseSeatMap).hasSize(2); assertThat(courseSeatMap.get("IT")).isEqualTo(60); assertThat(courseSeatMap.get("Chemical")).isEqualTo(120); } 

4.7. Dapatkan Kekunci Baris Berbeza

Kita boleh mendapatkan semua kekunci baris dari jadual menggunakan kaedah rowKeySet :

@Test public void givenTable_whenRowKeySet_returnsSuccessfully() { Table universityCourseSeatTable = HashBasedTable.create(); universityCourseSeatTable.put("Mumbai", "Chemical", 120); universityCourseSeatTable.put("Mumbai", "IT", 60); universityCourseSeatTable.put("Harvard", "Electrical", 60); universityCourseSeatTable.put("Harvard", "IT", 120); Set universitySet = universityCourseSeatTable.rowKeySet(); assertThat(universitySet).hasSize(2); } 

4.8. Dapatkan Kekunci Lajur Berbeza

Kita boleh mendapatkan semua kekunci lajur dari jadual menggunakan kaedah columnKeySet :

@Test public void givenTable_whenColKeySet_returnsSuccessfully() { Table universityCourseSeatTable = HashBasedTable.create(); universityCourseSeatTable.put("Mumbai", "Chemical", 120); universityCourseSeatTable.put("Mumbai", "IT", 60); universityCourseSeatTable.put("Harvard", "Electrical", 60); universityCourseSeatTable.put("Harvard", "IT", 120); Set courseSet = universityCourseSeatTable.columnKeySet(); assertThat(courseSet).hasSize(3); } 

5. Kesimpulan

Dalam tutorial ini, kami menggambarkan kaedah kelas Table dari perpustakaan Jambu. The Table kelas menyediakan koleksi yang mewakili meja seperti struktur yang mengandungi baris, lajur dan nilai sel yang berkaitan.

Kod yang termasuk dalam contoh di atas boleh didapati dalam projek GitHub - ini adalah projek yang berasaskan Maven, jadi mudah untuk diimport dan dijalankan sebagaimana adanya.