MAP pada JAVA
Object
.
Beberapa
bahasa pemrograman menggunakan istilah array asosiatif (associative
array) karena kesamaan perintah dengan array biasa. Pada bahasa
pemrograman tersebut, kita bisa menuliskan
Java tidak menggunakan perintah yang sama pada map, akan tetapi idenya serupa : Map adalah seperti array yang indeksnya adalah objek sembarang, bukan integer. Pada map, objek yang digunakan sebagai "indeks" disebut kunci (key). Objek yang ditunjuk oleh indeks tersebut disebut nilai (value).
Satu kunci hanya boleh menunjuk pada satu nilai, akan tetapi satu nilai bisa ditunjuk oleh beberapa kunci.
Dalam Java, map didefinisikan dalam interface
Java memiliki dua kelas yang mengimplementasikan interface
Dalam
Secara umum, lebih baik menggunakan
Misalnya progrma direktori telefon, yaitu pada kelas
Dalam aplikasi pemrograman sebenarnya, kita tidak perlu lagi membuat kelas baru untuk mengimplementasikan
Jika ini masalahnya, maka kita bisa membuat kelas baru yang menggunakan
Dalam metode
Dengan "membungkus"
A["andi"]
yang digunakan untuk memetakan "andi" pada suatu elemen di dalam array.Java tidak menggunakan perintah yang sama pada map, akan tetapi idenya serupa : Map adalah seperti array yang indeksnya adalah objek sembarang, bukan integer. Pada map, objek yang digunakan sebagai "indeks" disebut kunci (key). Objek yang ditunjuk oleh indeks tersebut disebut nilai (value).
Satu kunci hanya boleh menunjuk pada satu nilai, akan tetapi satu nilai bisa ditunjuk oleh beberapa kunci.
Dalam Java, map didefinisikan dalam interface
java.util.Map
, yang memiliki beberapa metode untuk bekerja dengan map. Jika map
adalah variabel dengan tipe Map
, maka berikut ini adalah beberapa metodenya :map.get(kunci)
-- mengembalikanObject
yang ditunjuk olehkunci
. Jika map tidak memiliki nilai yang ditunjuk olehkunci
, maka nilainull
akan dikembalikan. Tapi ingat juga bahwa mungkin saja kuncinya ada akan tetapi memang menunjuk pada nilainull
. Menggunakan "map.get(kunci)
" sama dengan perintah "A[kunci]
" pada array A. (Akan tetapi pada map tidak ada pengecualianIndexOutOfBoundsException
)map.put(kunci, nilai)
-- Mengisi map dengan pasangankunci
dannilai
. Kedua-duakunci
dannilai
bisa berupa objek apa saja. Jika map tersebut telah memilikikunci
maka nilai yang ditunjuk akan diganti dengan yang baru diberikan. Perintah ini mirip dengan "A[kunci] = nilai
" pada array.map.putAll(map2)
-- jikamap2
adalah map lain, maka perintah ini akan mengkopi semua isi padamap2
ke dalammap
.map.remove(kunci)
-- Jikamap
memilikikunci
yang menunjuk pada suatu nilai, perintah ini akan menghapuskunci
beserta nilai yang ditunjuknya, atau dengan kata lain menghapus pasangan kunci dan nilai pada map sekaligus.map.containsKey(kunci)
-- mengembalikan nilai boolean true jika map memilikikunci
yang merujuk pada suatu nilaimap.containsValue(nilai)
-- mengembalikan nilai boolean true jika map memilikinilai
yang ditunjuk oleh kunci apapun.map.size()
-- mengembalikanint
yang berisi jumlah pasangan asosiasi pada map.map.isEmpty()
-- mengembalikan boolean true jika map tidak berisi pasangan asosiasi apa-apa.map.clear()
-- menghapus semua pasangan asosiasi dalam map.
put
dan get
jelas merupakan metode yang paling sering digunakan dalam map. Dalam
banyak aplikasi, metode ini mungkin hanya metode ini yang kita butuhkan.
Artinya, menggunakan map sama mudahnya dengan menggunakan array biasa.Java memiliki dua kelas yang mengimplementasikan interface
Map
, yaitu : TreeMap
dan HashMap
.Dalam
TreeMap
,
pasangan kunci/nilai disimpan secara berurutan dalam pohon terurut,
yaitu diurut berdasarkan kuncinya. Supaya bisa bekerja dengan benar,
maka hanya objek yang bisa dibandingkan saja yang bisa digunakan sebagai
kunci. Artinya kelas kunci harus berupa kelas yang mengimplementasikan
interface Comparable
, atau Comparator
harus diberikan pada konstruktornya pada saat TreeMap
dibuat.HashMap
tidak menyimpan pasangan kunci/nilai dalam urutan tertentu, sehingga
tidak ada batasan objek apa yang bisa disimpan di dalamnya. Hampir semua
operasi dapat berjalan lebih cepat pada HashMap
dibandingkan dengan TreeMap
.Secara umum, lebih baik menggunakan
HashMap
kecuali kita butuh struktur data dalam urutan tertentu yang hanya bisa dilakukan dengan TreeMap
. Atau dengan kata lain, jika kita hanya menggunakan perintah put
dan get
, gunakan HashMap
.Misalnya progrma direktori telefon, yaitu pada kelas
BukuTelepon
yang memiliki pasangan nama/nomor telepon. Kelas ini memiliki operasi tambahEntri(nama, nomor)
dan ambilNomor(nama)
, di mana nama
dan nomor
bertipe String
.Dalam aplikasi pemrograman sebenarnya, kita tidak perlu lagi membuat kelas baru untuk mengimplementasikan
BukuTelepon
tersebut, artinya kita bisa langsung menggunakan Map
. Akan tetapi menggunakan Map
mungkin memiliki sedikit kerugian, karena kita dipaksa harus menggunakan Object
bukan String
.Jika ini masalahnya, maka kita bisa membuat kelas baru yang menggunakan
Map
dalam implementasinya, seperti berikut :
import java.util.HashMap;
public class BukuTelepon {
// Menyimpan data telepon
private HashMap info = new HashMap();
public void tambahEntri(String nama, String nomor) {
// Menyimpan nomor telepon pada nama yang sesuai
info.put(nama,nomor);
}
public String ambilNomor(String nama) {
// Mengambil nomor telepon dari nama
// Kembalikan null jika tidak ada nomor telepon untuk nama tsb
return (String)info.get(nama);
}
} // akhir kelas BukuTelepon
ambilNomor
di atas, nilai kembalian dari info.get(nama)
di-type-cast ke dalam String
. Karena kembalian dari metode get()
bertipe Object
maka type cast menjadi penting sebelum nilainya bisa digunakan.Dengan "membungkus"
Map
di dalam kelas BukuTelepon
,
kita menyembunyikan type-cast dalam implementasinya sehingga interaksi
kelas ini dengan kelas lain yang menggunakannya menjadi lebih natural.HashMap adalah kelas implementasi dari Map, Map itu sendiri adalah interface yang mempunyai fungsi untuk memetakan nilai dengan key unik. HashMap sangat bermanfaat sebagai memory record management, dimana tiap record dapat disimpan disebuah Map.
//HashMap adalah class implementasi dari Map, Map itu sendiri adalah
//interface yang mempunyai fungsi untuk memetakan nilai dengan key unik.
//HashMap sangat bermanfaat sebagai memory record management, dimana
//tiap record dapat disimpann di sebuah Map, kemudian setiap Map
//diletakkan pada vector, list atau set yang masih turunan dari Collection
//Demikian pula Hashmap sangat baik untuk menghandle resultset dari hasil query.
Map arecord= new HashMap();
arecord.put("id","1000");
arecord.put("nama","Sintha");
arecord.put("alamat","Jl. Jeruk No 10");
//mengambil data map dengan method get()
System.out.println(arecord.get("id"));
System.out.println(arecord.get("nama"));
System.out.println(arecord.get("alamat"));
//Meletakkan map ke vector
Vector mhsList = new Vector();
mhsList.add(arecord);
//menambah record
arecord=new HashMap();
arecord.put("id","1001");
arecord.put("nama","Kina");
arecord.put("alamat","Jl. Sudirman ");
mhsList.add(arecord);
//mencetak virtual table (vector mhsList)
for (int i=0;i<mhsList.size();i++){
System.out.print(((Map)mhsList.get(i)).get("id") +"|");
System.out.print(((Map)mhsList.get(i)).get("nama") +"|");
System.out.println(((Map)mhsList.get(i)).get("alamat") +"|");
}
Treemap adalah salah satu implementasi dari class interface yang mengurutkan koleksi berdasarkan key dari elemen berupa pasangan <key, value>.
Dari pengalaman penulis, TreeMap sangat berguna terutama untuk mengelola antrian berdasarkan key atau index, bukan value atau nilainya.
Berikut adalah contoh kode program sederhana yang memasukkan dan menghilangkan elemen dengan value berupa array 2 dimensi bertipe dobel.
Contoh
package com.kursusinternet.collection;import java.util.TreeMap;
import java.util.Map.Entry;
public class ContohTreeMap {
/**
* Menambahkan titik koordinat (x,y) pada nodelist dengan pengenal "key"
*/
public static void inputKoordinat(TreeMap<Integer, Double[]> nodeList,
int key, double x, double y) {
Double[] node = new Double[2];
node[0] = x;
node[1] = y;
nodeList.put(key, node);
}
/**
* Menghilangkan titik koordinat pada nodelist dengan pengenal "key"
*/
public static void removeKoordinat(TreeMap<Integer, Double[]> nodeList,
int key) {
nodeList.remove(key);
}
public static void main(String[] args) {
TreeMap<Integer, Double[]> titik = new TreeMap<Integer, Double[]>();
inputKoordinat(titik, 5, 3.2, 5.4);
inputKoordinat(titik, 3, 10.22, 11.23);
inputKoordinat(titik, 1, 7.1, 7.5);
removeKoordinat(titik, 3);
for (Entry<Integer, Double[]> entry : titik.entrySet())
{
System.out.println("Entri " + entry.getKey() + ", elemen ke 0 = " + entry.getValue()[0]);
System.out.println("Entri " + entry.getKey() + ", elemen ke 1 = " + entry.getValue()[1]);
}
}
}
Entri 1,0 =7.1
Entri 1,1 =7.5
Entri 5,0 =3.2
Entri 5,1 =5.4
Tidak ada komentar:
Posting Komentar