collection dan generic

16

Click here to load reader

Upload: hunter-x-hunter

Post on 10-Aug-2015

26 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Collection Dan Generic

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

Page 2: Collection Dan Generic

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++)

Page 3: Collection Dan Generic

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() {

Page 4: Collection Dan Generic

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);

}

}

Page 5: Collection Dan Generic

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) {

Page 6: Collection Dan Generic

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.

Page 7: Collection Dan Generic

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 {

Page 8: Collection Dan Generic

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

Page 9: Collection Dan Generic

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.

Page 10: Collection Dan Generic

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);

}

}

Page 11: Collection Dan Generic

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.

Page 12: Collection Dan Generic

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; }

Page 13: Collection Dan Generic

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

Page 14: Collection Dan Generic

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!