import java.util.*;

public class KunciBerubah {
    // equals dan hashCode mengikuti field nama, yang masih bisa diubah.
    static class Pelanggan {
        String nama;

        Pelanggan(String nama) {
            this.nama = nama;
        }

        @Override
        public boolean equals(Object o) {
            return o instanceof Pelanggan p && p.nama.equals(nama);
        }

        @Override
        public int hashCode() {
            return nama.hashCode();
        }

        @Override
        public String toString() {
            return nama;
        }
    }

    public static void main(String[] args) {
        Map<Pelanggan, Integer> poin = new HashMap<>();
        Pelanggan kunci = new Pelanggan("Budi");
        poin.put(kunci, 120);

        System.out.println("get(Budi) sebelum ubah : " + poin.get(new Pelanggan("Budi")));

        kunci.nama = "Siti"; // field milik key diubah setelah key dimasukkan
        System.out.println("get(Budi) setelah ubah : " + poin.get(new Pelanggan("Budi")));
        System.out.println("get(Siti)              : " + poin.get(new Pelanggan("Siti")));
        System.out.println("ukuran map             : " + poin.size());
        System.out.println("isi map                : " + poin);
    }
}
