Java Map
Map
adalah struktur data collection yang berisikan mapping antara key dan value.
Key harus bersifat unik, tidak boleh duplikat, dan satu key cuma boleh mapping ke satu value. Map
sebenarnya mirip dengan Array, cuma bedanya kalo di Array, key adalah index (integer), sedangkan di Map, key nya bebas kita tentukan sesuai keinginan kita Map<K, V>
.
Map<Integer, String> student = new HashMap<Integer, String>();
Hashmap
HashMap
adalah implementasi Map
yang melakukan distribusi key menggunakan hashCode()
function. Karena HashMap sangat bergantung dengan hashCode()
method,
jadi pastikan kita harus membuat function hashCode seunik mungkin, karena jika terlalu banyak nilai hashCode()
yang sama, maka pendistribusian key nya tidak akan optimal sehingga proses get data di Map
akan semakin lambat. Di HashMap
pengecekan data duplikat dilakukan dengan menggunakan method equals()
nya.
import java.util.HashMap;
import java.util.Map;
public class DemoHashMap {
public static void main(String[] args) {
Map<Integer, String> student = new HashMap<Integer, String>();
student.put(1, "Thomas"); // method put dapat digunakan untuk insert dan update data
student.put(2, "Didin");
student.put(3, "Abdullah");
student.put(4, "Rustam");
System.out.println(student.get(2));
System.out.println(student.get(4));
System.out.println(student.get(3));
System.out.println(student.get(1));
}
}
LinkedHashMap
LinkedHashMap
adalah implementasi Map
dengan menggunakan Double Linked List. Pada LinkedHashMap
data akan disimpan berurutan dalam Linked List sesuai urutan waktu kita menyimpan data. Namun perlu diperhatikan, proses get data di LinkedHashMap
akan semakin lambat,
karena harus melakukan iterasi data linked list terlebih dahulu. Gunakan LinkedHashMap
jika memang kita lebih mementingkan iterasi/urutan data Map nya.
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
public class DemoLinkedHashMap {
public static void main(String[] args) {
Map<String, String> countrys = new LinkedHashMap<>();
// Map<String, String> countrys = new HashMap<>(); // Jika menggunakan HashMap data tidak berurut karna menggunakan hash
countrys.put("id", "Indonesia");
countrys.put("jp", "Japan");
countrys.put("in", "India");
countrys.put("zw", "Zimbabwe");
Set<String> keys = countrys.keySet();
for (String k : keys) {
System.out.println(k);
}
}
}
IdentityHashMap
IdentityHashMap
adalah implementasi Map
sama seperti HashMap
Yang membedakan adalah cara pengecekan kesamaan datanya, tidak menggunakan function equals
, melainkan menggunakan operator ==
(reference equality), artinya data dianggap sama, jika memang lokasi di memory tersebut sama.
Contoh:
import java.util.IdentityHashMap;
import java.util.Map;
public class DemoIdentityHashMap {
public static void main(String[] args) {
Map<String, String> person = new IdentityHashMap<String, String>();
String firstName = "Ucup";
String midleName = "si";
String lastName = "Timposu";
String name1 = "Ucup si Timposu";
String name2 = firstName + " " + midleName + " " + lastName;
// Perbedaan menggunakan equals dan reference equality
System.out.println(name1.equals(name2)); // true
System.out.println(name1 == name2); // false => merujuk ke reference yang berbeda
person.put("person1", name1);
person.put("person2", name2);
System.out.println(person.size());
}
}
Output:
true
false
2
WeakHashMap
WeakHashMap
adalah implementasi Map
mirip dengan HashMap
. Yang membedakan adalah WeakHashMap
menggunakan weak key, dimana jika tidak digunakan lagi maka secara otomatis data di WeakHashMap
akan dihapus.
Artinya, jika terjadi garbage collection di Java, bisa dimungkinkan data di WeakHashMap
akan dihapus.
WeakHashMap
cocok digunakan untuk menyimpan data cache di memory secara sementara.
import java.util.Map;
import java.util.WeakHashMap;
public class DemoWeakHashMap {
public static void main(String[] args) {
Map<Integer, Integer> values = new WeakHashMap<Integer, Integer>();
for (int i = 1; i <= 1_000_000; i ++) {
values.put(i, i);
}
System.gc(); // menjalankan gerbage collection java
System.out.println(values.size()); // values tidak sampai 1.000.000 karena sebagian di hapus WeekHashMap
}
}
EnumMap
EnumMap
adalah implementasi Map
dimana key nya adalah bertipe Enum. Karena data Enum sudah pasti unik dan tidak boleh ada yang sama, oleh karena itu cocok dijadikan key di Map
. Algoritma pendistribusian key dioptimalkan untuk Enum,sehingga lebih optimal dibandingkan menggunakan hashCode()
method.
import java.util.EnumMap;
import java.util.Map;
public class DemoEnumMap {
static enum Gender {
MAN, WOMAN, NOT_DEFINED
}
public static void main(String[] args) {
Map<Gender, String> persons = new EnumMap<Gender, String>(Gender.class);
persons.put(Gender.MAN, "Ade");
persons.put(Gender.WOMAN, "Vivin");
persons.put(Gender.NOT_DEFINED, "Eben");
for (var key : persons.keySet()) {
System.out.println(persons.get(key));
}
}
}