Map digunakan untuk menghubungkan antara satu data (key) dengan data yang lain (value). Array dan List menggunakan indeks untuk menentukan data yang mana satu, manakala Map menggunakan key yang kita letak untuk merujuk data yang mana.

Antara class yang menggunakan interface Map ialah HashMap, TreeMap, dan LinkedHashMap. Kalau perasan nama ketiga-tiga class tersebut lebih kurang sama dengan nama untuk class Set. Ini bermaksud fungsi ketiga-tiga class Map tersebut sama sahaja dengan class Set.

Contoh penggunaan Map:

package datastructure;

import java.util.HashMap;
import java.util.Map;

public class ContohMap {

    public static void main(String[] args) {
        Map<String, Double> harga = new HashMap<>();
        harga.put("burger_ayam", 2.0);
        harga.put("burger_ayam_special", 3.6);
        harga.put("burger_ayam_double_special", 5.4);

        System.out.printf("Harga burger ayam: RM %.2f", harga.get("burger_ayam"));
        System.out.println();
    }
}

Berpandukan Java API, interface Map adalah seperti berikut:

public interface Map<K,V>

Ini bermaksud kita perlu letakkan dua jenis data untuk generics K (key) dan V (value). Oleh itu, code di atas bermaksud key kita ialah jenis String dan value kita ialah jenis Double.

Method yang boleh digunakan ialah,

  • put() – untuk memasukkan data

  • get() – untuk mengakses data menggunakan key

Cara untuk mendapatkan semua key

Kita boleh menggunakan method keySet() untuk mendapatkan senarai key yang ada dalam sesebuah Map:

package datastructure;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class ContohMap {

    public static void main(String[] args) {
        Map<String, Double> harga = new HashMap<>();
        harga.put("burger_ayam", 2.0);
        harga.put("burger_ayam_special", 3.6);
        harga.put("burger_ayam_double_special", 5.4);

        System.out.println("Senarai burger:");

        Set<String> senaraiBurger = harga.keySet();

        for (String burger : senaraiBurger) {
            System.out.println(burger);
        }
    }
}

dan boleh digunakan seperti berikut:

package datastructure;

import java.util.HashMap;
import java.util.Map;

public class ContohMap {
    public static void main(String[] args) {
        Map<String, Double> harga = new HashMap<>();
        harga.put("burger_ayam", 2.0);
        harga.put("burger_ayam_special", 3.6);
        harga.put("burger_ayam_double_special", 5.4);

        for (String key : harga.keySet()) {
            System.out.printf("Harga %s : RM %.2f", key, harga.get(key));
            System.out.println();
        }
    }
}

Jika mahu ikut susunan seperti mana yang kita masukkan, tukar sahaja dari HashMap ke LinkedHashMap.

MultiMap

MultiMap ialah Map yang membenarkan satu key merujuk beberapa value. Interface Map yang biasa hanya membenarkan satu key untuk merujuk satu value sahaja. Java tidak menyediakan MultiMap tetapi dengan sedikit trick, kita boleh membuat MultiMap menggunakan Map yang biasa.

Trick tersebut adalah dengan menggunakan mana-mana data structure sebagai value, contohnya:

package datastructure;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ContohMap {
    public static void main(String[] args) {
        Map<String, List<String>> haiwan = new HashMap<>();

        haiwan.put("karnivor", new ArrayList<>());
        haiwan.get("karnivor").add("harimau");
        haiwan.get("karnivor").add("singa");

        haiwan.put("omnivor", new ArrayList<>());
        haiwan.get("omnivor").add("beruang");
        haiwan.get("omnivor").add("ayam");

        for (String karnivor : haiwan.get("karnivor")) {
            System.out.println(karnivor);
        }
    }
}