Dalam Java, map adalah struktur data yang menghubungkan kunci dengan nilai, sehingga memungkinkan penyimpanan, akses, pembaruan, dan penghapusan pasangan kunci-nilai secara efisien. Berbeda dengan koleksi yang hanya menyimpan elemen, map mempertahankan hubungan pemetaan, di mana setiap kunci bersifat unik dan menunjuk tepat ke satu nilai, meskipun beberapa kunci dapat memiliki nilai yang sama.

Antarmuka Map menyediakan mekanisme untuk memperoleh nilai berdasarkan kunci yang unik (tidak duplikat). Antarmuka ini juga menyediakan tiga tampilan koleksi yang memungkinkan isi map dikelola dengan cara yang berbeda: sebagai himpunan kunci, koleksi nilai, atau himpunan pemetaan antara kunci dan nilai. Antarmuka utama yang diturunkan dari Map adalah SortedMap, yang merepresentasikan map terurut, serta subantarmukanya, NavigableMap. Map banyak digunakan oleh berbagai kelas dalam pustaka standar. Kelas utama yang mengimplementasikan antarmuka Map untuk map yang tidak konkuren adalah HashMap, LinkedHashMap, dan TreeMap. Untuk map konkuren, kelas utamanya adalah ConcurrentHashMap dan ConcurrentSkipListMap.

Berikut adalah bagian dari definisi antarmuka Map yang hanya memuat metode-metode utama:

public interface Map<K,V>{
    // Query Operations
    int size();
    boolean isEmpty();
    boolean containsKey(Object key);
    boolean containsValue(Object value);
    V get(Object key);

    // Modification Operations
    V put(K key, V value);
    V remove(Object key);
    void putAll(Map<? extends K, ? extends V> m);
    void clear();

    // Views
    Set<K> keySet();
    Collection<V> values();
    Set<Map.Entry<K, V>> entrySet();

    // Definition of the Entry interface
    interface Entry<K, V> {
        // Body omitted
    }

    // (continues...)
}

Contoh berikut menunjukkan sebuah map mobil yang kuncinya adalah nomor pelat dan nilainya adalah nama model mobil yang bersangkutan. Dengan map ini, misalnya, kita dapat memeriksa apakah elemen tertentu ada dengan menggunakan kunci sebagai parameter metode containsKey. Selain itu, metode get mengembalikan nilai yang terkait dengan kunci yang diberikan sebagai parameter, sedangkan metode remove menghapus entri dari map:

void main() {
    Map<String, String> cars = new HashMap<>();
    cars.put("ABCD2935", "Tesla Model S");
    cars.put("YJKF9353", "Toyota Corolla");
    cars.put("WFLO1304", "Honda CRV");

    var key = "ABCD2935";

    if (cars.containsKey(key)){
        IO.println("Vehicle data:");
        IO.println(cars.get(key));
        IO.println("Removing the vehicle...");
        cars.remove(key);
    } else
        IO.println("Vehicle not found!");
}

Selain metode-metode yang dijelaskan di atas, terdapat juga beberapa metode default yang menyediakan fungsionalitas tambahan.

Antarmuka ini juga menyediakan metode untuk membuat map yang tidak dapat diubah dari nilai-nilai yang diberikan (of dan ofEntries, bersama metode bantuan entry) atau dari map yang sudah ada (copyOf).

Gambar 1 menunjukkan antarmuka Map dan subantarmuka utamanya. Subantarmuka langsung dari Map adalah SequencedMap, Bindings, dan ConcurrentMap. Secara tidak langsung, SortedMap, NavigableMap, dan ConcurrentNavigableMap juga diturunkan dari Map (yang terakhir juga merupakan subantarmuka dari ConcurrentMap).

Antarmuka Map dan subantarmukanya

Keturunan Map yang penting antara lain antarmuka SortedMap dan NavigableMap.

Antarmuka SortedMap merupakan perluasan dari antarmuka SequencedMap dan merepresentasikan map yang mempertahankan kuncinya dalam urutan tertentu, sesuai dengan urutan alami kunci atau Comparator tertentu yang diberikan saat map dibuat. Satu-satunya subantarmuka langsungnya dalam Collections Framework, yaitu NavigableMap, menambahkan metode untuk operasi navigasi yang lebih lanjut, misalnya untuk menentukan kunci yang paling dekat dengan nilai tertentu atau untuk menelusuri map dalam urutan menaik maupun menurun.

Dalam praktiknya, kita sering menggunakan NavigableMap daripada SortedMap, karena kedua kelas yang mengimplementasikan SortedMap dalam Collections Framework melakukannya secara tidak langsung (TreeMap mengimplementasikan NavigableMap, sedangkan ConcurrentSkipListMap mengimplementasikan ConcurrentNavigableMap). NavigableMap menyediakan fungsionalitas yang sedikit lebih luas dan metode khusus untuk melakukan navigasi melalui map, serupa dengan NavigableSet untuk himpunan.


Artikel ini merupakan adaptasi dari konten buku Orientação a Objetos com Java, karya Eduardo Kessler Piveta