collection dan generic
TRANSCRIPT
Praktikum 5
Collection dan Generic
Tujuan Praktikum :
Memberikan pemahaman kepada mahasiswa tentang collection
Memberikan pemahaman kepada mahasiswa tentang generic
I. DASAR TEORI
1.1 Collection
Collection Class merupakan sekumpulan class yang digunakan untuk menyimpan,
mengolah, dan mengambil kembali sekumpulan object. Class – class untuk struktur data
terdapat pada package java.util.
Pada class java terdapat tiga jenis koleksi yang mempunyai cara berbeda dalam menyimpan
dan mengolah objek :
Sets, merupakan jenis koleksi paling sederhana. Dengan karakteristik sebagai
berikut :
o Tidak ada mekanisme kontrol bagaimana data dimasukan dan diurutkan.
o Tidak boleh ada objek yang sama (harus unik) .
o Yang termasuk di dalamnya adalah : HashSet, LinkedHashSet, TreeSet, dan
EnumSet
Sequence, merupakan jenis koleksi yang canggih daripada sets. Dengan
karakteristik sebagai berikut :
o Sudah ada mekanisme kontrol bagaimana data dimasukan dan diurutkan
(data masuk berurutan).
o Yang termasuk di dalamnya adalah : Vector, Stack, LinkedList, ArrayList, dan
PriorityQueue.
Maps, Sering juga disebut dictionary karena objek disimpan berpasangan dengan
kunci(key). Artinya, setiap objek yang disimpan dalam maps mempunyai kunci yang
berbeda. Collection class yang termasuk ke dalam kategori maps, antara lain
HashTable, HashMap, LinkedHashMap, WeakHashMap, IdentityHashMap dan TreeMap
Ilustrasi class pada Java Collection FrameWork
1. Objek Array
Dalam Java API, Arrays merupakan class dalam package java.util. Berikut merupakan daftar
metode penting yang dapata membantu pengolahan data dengan array.
Method Keterangan
static int binarySearch(array, key) Pencarian nilai dalam array.
boolean equals(array1, array2) Membandingkan apakah dua array memiliki
nilai sama. Bekerja pada array satu
dimensi.
static void sort (array) Mengurutkan isi array
static string toString(array) Mengubah nilai array menjadi string.
Berikut dua contoh kode program yang menggunakan array. Program ArrayUrut digunakan
untuk mengurutkan elemen array, sedangkan program ArrayCari digunakan untuk mencari
nilai pada elemen array dan menentukan letaknya.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
import java.util.Arrays;
public class ArrayUrut {
public static void main(String[] args) {
String[] nilaiMataKuliah = {"B","D","A","E","C"};
System.out.println("Sebelum diurutkan : ");
for(int i=0;i<5;i++)
System.out.println(nilaiMataKuliah[i]);
Arrays.sort(nilaiMataKuliah);
System.out.println("Setelah diurutkan : ");
for(int j=0;j<5;j++)
11.
12.
13.
System.out.println(nilaiMataKuliah[j]);
}
}
Pencarian dalam array dilakukan dengan metode binarySearch().
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
import java.util.Arrays;
public class ArrayCari {
public static void main(String[] args) {
String[] gender = new String[3];
gender[0]="laki";
gender[1]="perempuan";
gender[2]="waria";
int find = Arrays.binarySearch(gender,"perempuan");
if(find > -1)
System.out.println("Data ditemukan pada : "+find);
else
System.out.println("Data tidak ditemukan");
}
}
2. List
List merupakan sebuah interface dari koleksi yang ada. Koleksi-koleksi yang merupakan
implementasi dari List antara lain adalah ArrayList, Vector, Stack, LinkedList, dll. List juga
dapat diimplementasikan pada class yang dibuat dengan catatan, bahwa seluruh method-
method yang terdapat pada List tersebut harus diimpementasikan.
Berikut merupakan contoh penggunaan List saat diimplementasikan pada suatu class.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class Listz implements List{
public static void main(String[] args) {
//do your bussiness logic here
}
public int size() {
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
throw new UnsupportedOperationException("Not supported yet.");
}
public boolean isEmpty() {
throw new UnsupportedOperationException("Not supported yet.");
}
public boolean contains(Object o) {
throw new UnsupportedOperationException("Not supported yet.");
}
public Iterator iterator() {
throw new UnsupportedOperationException("Not supported yet.");
}
...
...
Berikut merupakan contoh penggunaan List saat dilakukan polimorfhisme dengan
konstruktor kelas turunannya.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
import java.util.ArrayList;
import java.util.List;
public class Listz{
public static void main(String[] args) {
List angka = new ArrayList();
angka.add("One");
angka.add("Two");
angka.add(3);
angka.add("Four");
for (Object i: angka)
System.out.println(i);
angka.set(1, "Satu");
angka.remove(angka.size()-1);
System.out.println(angka);
}
}
3. Array List
ArrayList merupakan koleksi yang mirip dengan array, namun dengan kemampuan yang
lebih baik, misalnya :
- Jumlah elemen dalam ArrayList dapat berubah secara fleksibel tergantung dari
jumlah data yang ada di dalamnya.
- Setenlah array terbentuk, data baru dapat dimasukkan di tengah-tengah. Tidak harus
di akhir elemen array.
- Isi dalam array bisa dihapus dan index dalam array sesudahnya akan maju satu
langkah untuk mengisi slot kosong tersebut. Misal, data pada array index ke 14
dihapus. Maka, array dengan index 15 dan sesudahnya akan maju dan menjadi index
15, demikian seterusnya.
Berikut metode dan konstruktor dalam ArrayList yang penting untuk diketahui.
Konstruktor Keterangan
ArrayList() Konstruktor ArrayList dengan kapasitas 10 elemen.
ArrayList(int kapasitas) Konstruktor ArrayList dengan kapasitas yang ditentukan
sendiri.
Metode Keterangan
add(object elemen) Menambahkan objek ke dalam ArrayList.
add(int index,object elemen) Menambahkan objek kedalam index yang ditentukan.
clear() Menghapus semua elemen dalam ArrayList.
get(int index) Mengambil objek pada index tertentu.
iterator() Mengembalikan iterator pada ArrayList.
remove(int index) Menghapus objek dengan index tertentu.
remove(object elemen) Menghapus elemen tertentu. Jika ada lebih dari satu
elemen, maka hanya satu elemen saja yang dihapus.
size Mengembalikan nilai berupa jumlah elemen dalam
ArrayList.
toArray() Mengembalikan elemen ArrayList sebagai array objek.
toArray(tipe[] array) Mengembalikan elemen ArrayList sebagai Array dengan
tipe tetentu.
Berikut ini contoh kode yang menggunakan koleksi objek ArrayList.
1.
2.
3.
import java.util.ArrayList;
public class ArrayListz {
public static void main(String[] args) {
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
ArrayList angka = new ArrayList();
angka.add("One");
angka.add("Two");
angka.add(3);
angka.add("Four");
for (Object i: angka)
System.out.println(i);
angka.set(1, "Satu");
angka.remove(angka.size()-1);
System.out.println(angka);
}
}
4. Vector
Hampir sama seperti ArrayList. Vector mempunyai dua atribut utama : kapasitas dan
penambahan kapasitas. Penambahan kapasitas menentukan berapa jumlah index yang akan
ditambahkan jika index saat ini sudah tidak mencukupi.
Berikut daftar metode dalam class java.util.Vector yang sering digunakan.
Metode Keterangan
void add(int index, object
elemen)
Memasukkan Object ke dalam Vector dengan index yang
ditentukan.
boolean add(Object elemen) Menambahkan Object ke dalam Vector. Jika berhasil, nilai
Boolean = true.
void addElement(Object
elemen)
Menambahkan Object ke dalam Vector dengan urutan
terakhir. Sama dengan add(Object).
void insertElementAt(Object
elemen, int index)
Memasukkan Object dengan index yang ditentukan.
Sama dengan add (int, Object)
boolean add(int
index,Collection koleksi)
Menambahkan elemen-elemen dari suatu koleksi. Jika
berhasil akan dikembalikan nilai true.
void clear() Menghapus semua elemen dalam Vector.
object remove(int index) Menghapus objek dengan index yang ditentukan dan
mengembalikan referensi Object tersebut.
void setElementAt(Object
elemen, int index)
Menambahkan Object ke dalam index tertentu dengan
menimpanya. Jadi, Object lama akan hilang.
object get(int index) Mengambalikan referensi Object pada index tertentu.
object firstElement() Mengembalikan Object dengan index = 0.
object lastElement() Mengembalikan Object pada index terakhir.
int indexOf(Object Element) Mengembalikan nilai index dari Object yang dicari. Jika
jumlah object lebih dari satu, maka hanya index pertama
saja yang ditampilkan. Sedangkan jika tidak ditemukan,
nilai -1 akan dikembalikan.
object[] toArray() Mengambalikan array Object dari Vector.
5. HashMap
HashMap merupakan koleksi yang memetakan kunci (key) ke dalam nilai (value). Kunci dan
nilai dalam HashMap boleh di set dengan null. Class ini mengimplementasikan interface
Map.
HashMap sangat cocok digunakan pada data cukup kompleks. Dengan demikian,
programmer tidak harus menghafal letak index seperti pada array dan collection class
sequence lainnya.
Metode Keterangan
void clear() Menghapus semua elemen dalam HashMap sehingga
ukurannya menjadi 0.
boolean isEmpty() Nilai true dikembalikan jika tidak ada elemendi dalam.
int size() Mengambalikan jumlah elemen dalam HashMap.
boolean containsKey(Object
key)
Nilai True jika key ditemukan dalam HashMap.
boolean containsValue(Object
value)
Nilai true jika value ditemukan dalam HashMap.
object get(Object key) Mengembalikan nilai Object dengan key tertentu.
setkeySet() Mengambil key dan dimasukkan ke dalam Set. Key tidak
mungkin ada yang sama sehingga tidak menimbulkan
masalah jika diubah ke dalam format Set.
object put(Object key, Object
value).
Menambah elemen ke dalam HashMap.
object remove(Object key) Membuang objek dari HashMap.
Berikut contoh penggunaan dan pengolahan data dengan HashMap.
1.
2.
3.
4.
import java.util.HashMap;
import java.util.Set;
public class HashMapz {
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
public static void main(String[] args) {
HashMap map = new HashMap();
map.put("Nama","Andi");
map.put("NIM",new Integer(12345));
map.put("Alamat", "Malang");
System.out.println("Ukuran hashMap : "+map.size());
map.put("Email", "[email protected]");
Object email = map.get("Email");
System.out.println("Email nya : "+email);
boolean containKey = map.containsKey("NIM");
System.out.println("Has key (NIM): "+containKey);
Object removed = map.remove("NIM");
System.out.println("Removed : "+removed);
System.out.println("Size baru : "+map.size());
Set set = map.keySet();
System.out.println("Key Set size: "+set.size());
boolean removedFromSet = set.remove("Alamat");
System.out.println("Alamat: "+removedFromSet);
System.out.println("Size: "+map.size());
Collection values = map.values();
System.out.println("Collection size: "+values.size());
}
}
6. Interface Iterator
Interface Iterator merupakan fasilitas pada Java API yang dapat digunakan untuk melakukan
iterasi komponen-komponen dalam Koleksi.
Terdapat tiga metode dalam interface Iterator yang sering digunakan.
Metode Keterangan
hasNext() Menentukan apakah masih ada sisa koleksi.
next() Mengembalikan elemen objek pada koleksi. Jika sudah
tidaka ada elemen lagi namun berusaha diambil, akan
muncul pesan, NoSuchElementException.
remove() Menghapus elemen yang terakhir kali diakses oleh
Iterator.
Penggunaan interface Iterator dimulai dengan deklarasi Iterator
Iterator it = v.iterartor();
Setelah itu, pengolahan data dapat dilakukan menggunakan perulangan dan memanfaatkan
metode hasNext() dan next().
while(v.hasNext()){
Object ob =v.next();
System.out.println(v);
}
for(Iterator i = v.iterator();i.hasNext();){
String name = (String) i.next();
System.out.println(name);
}
7. Stack
Stack merupakan koleksi yang pengambilan dan penyimpanan data di dalamnya
menggunakan mekanisme last in first out (LIFO). Artinya, data yang terakhir ditambahkan
akan pertama kali dikeluarkan.
Posisi atas
Elemen 3
Elemen 2
Elemen 1
Elemen 0
Posisi bawah
Dengan stack, data di posisi paling atas diolah lebih dulu
Metode Keterangan
Int getSize() Mengembalikan jumlah elemen dalah stack yang berada
di posisi paling atas.
E peek() Mengembalikan elemen stack paling atas.
E pop() Mengembalikan sekaligus membuang elemen stack yang
berada di posisi paling atas.
E push() Menambahkan elemen baru di posisi paling atas stack.
Boolean isEmpty() Jika stack belum ada isinya, dikembalikan nilai true.
Berikut cotoh kode program yang menggunakan stack, generic, dan iterator untuk
pengolahan data.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
import java.util.Iterator;
import java.util.Stack;
public class Stackz {
public static void main(String[] args) {
Stack<String> s = new Stack<String>();
s.push("Satu");
s.push("Dua");
s.push("Tiga");
s.push("Empat");
s.push("Lima");
s.pop();
String s1 = s.pop();
String s2 = s.peek();
int o = s.search("Dua");
boolean isEmpty = s.empty();
for(Iterator ite = s.iterator();ite.hasNext();)
{
System.out.println(ite.next());
}
System.out.println("Index dengan elemen \"Dua\": "+o);
System.out.println("Apakah kosong? "+isEmpty);
}
}
1.2 Generic
Generic merupakan implementasi tipe data pada koleksi. Tanpa adanya generic, kita dapat
memasukkan tipe data yang berbeda-beda dalam sebuah koleksi. Baru ketika data tersebut
diambil, maka perlu dilakukan casting.
Misal pada koleksi ArrayList, objek dapat ditambahkan dengan perintah berikut :
public boolean add(Object o){
//statement(s)
}
Sedangkan untuk pengambilan data, harus dilakukan casting tipe data sebagai berikut :
Mahasiswa e = (Mahasiswa) organisasi.get(0);
Artinya, koleksi ArrayList organisasi memiliki elemen dengan tipe objek Mahasiswa. Masalah
dapat timbul jika ada beberapa elemen yang bukan bertipe Mahasiswa. Elemen lain
mungkin saja ada karena semua Object dapat ditambahkan dengan metode add().
Deklarasi dan Penerapan Generic
Tipe generic pada koleksi dapat diterapkan dengan memambahkan tanda<>.
ArrayList<Mahasiswa> organisasi;
Vector<integer> kodePos = new Vector<Integer>;
Jika dipaksakan menambahkan elemen dengan tipe yang berbeda maka akan keluar error
misal :
kodePos.add(“belum ada”); //akan terjadi error
Dengan adanya generic, program lebih handal karen dapat mencegah kesalahan-kesalahan
karena kelalaian programmer.
II. MATERI PRAKTIKUM
Percobaan 1
1234567891011121314151617181920212223242526
public class Barang {
private String nama_barang; private int jumlah;
public Barang(String nama_barang, int jumlah) { this.nama_barang = nama_barang; this.jumlah = jumlah; }
public int getJumlah() { return jumlah; }
public void setJumlah(int jumlah) { this.jumlah = jumlah; }
public String getNama_barang() { return nama_barang; }
public void setNama_barang(String nama_barang) { this.nama_barang = nama_barang; }}
123456789101112131415161718192021222324
import java.util.ArrayList;
public class ShoopingCart <t> {
private ArrayList<t> goodies; private String nama; private t item;
public ShoopingCart(String nama) { this.nama=nama; this.goodies=new ArrayList<t>();
}
public String getNama() { return nama; }
public ArrayList<t> getGoodies() { return goodies; }
2526272829303132333435
public t getItem(int idx) { return this.getGoodies().get(idx); }
public void addItem(t item) { this.goodies.add(item); }
}
1234567891011121314151617181920212223242526
public class Main {
public static void main(String[] args) {
shoopingCart <Barang> sc = new ShoopingCart("Doni");
sc.addItem(new Barang("permen", 3));
sc.addItem(new Barang("cokelat", 46));
System.out.println("nama :" + sc.getNama());
System.out.println("Pesanan anda ");
for(Barang b: sc.getGoodies()) { System.out.println("nama barang :"+b.getNama_barang()); System.out.println("Jumlah :"+b.getJumlah()); }
}
}
Pertanyaan :
1. Pada kelas ShoopingCart pada baris 1 apa fungsi <t> ?
2. Collection apa yang digunakan pada kelas ShoopingCart ?
3. Pada kelas shoopingCart apa maksud baris ke 34?
4. Pada kelas shoopingCart apa maksud baris ke 26?
5. Pada kelas ShoopingCart ubah Collection ArrayList menjadi List dengan menambah
package java.util.List, apa yang terjadi? Jelaskan
6. Pada kelas ShoopingCart ubah Collection ArrayList menjadi Vector dengan
menambah package java.util.Vector, apa yang terjadi? Jelaskan
7. Pada kelas Main apa maksud dari baris ke 6 ?
8. Pada kelas Main jelaskan maksud baris ke 16 ?
9. Pada kelas Main, tambahkan isi sc hingga elemen yang dimilikinya mencapai 10!
10. Bagaimana caranya untuk menampilkan sc item ke-4 s.d ke-8!
11. Apakah isi dari collection selalu dapat diurutkan!