Java generic dan collection

7,672 views
7,540 views

Published on

Java, Generic, Collection, Struktur Data, Java Generic and Collection, Generic Programming

Published in: Education
10 Comments
10 Likes
Statistics
Notes
  • terima kasih sangat membantu
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

  •    Reply 
    Are you sure you want to  Yes  No
    Your message goes here

  • trimakasiih

    <b>[Comment posted from</b> http://eecchhoo.wordpress.com/ebook-2/]
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Ok dehhhh

    <b>[Comment posted from</b> http://eecchhoo.wordpress.com/ebook-2/]
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Thanks


    <b>[Comment posted from</b> http://eecchhoo.wordpress.com/ebook-2/]
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
7,672
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
482
Comments
10
Likes
10
Embeds 0
No embeds

No notes for slide

Java generic dan collection

  1. 1. UNIVERSITAS KOMPUTER INDONESIA Java Generic & Collection Unikom Programming Team Eko Kurniawan Khannedy 5/1/2010
  2. 2. Java Generic } } Andai kita membutuhkan banyak data yang Kenapa Pemrograman Generic? akan di tampung dalam kelas Koleksi, maka mau tidak mau kita harus membuat setiap Generic Programming artinya kode yang kelas Koleksi untuk tipe tertentu. Hal ini dapat digunakan oleh beberapa objek yang sangat melelahkan jika dilakukan :( tipenya berlainan. Misal kita memiliki kelas KoleksiString, KoleksiInteger dan Dengan demikian, diperlukan Generic KoleksiDouble, dengan menggunakan Generic Programming untuk mengatasi masalah Programming, kita dapat membuat kelas tersebut. Jika kita menggunakan Generic Koleksi yang dapat menampung data String, Programming, maka kita hanya cukup Integer maupun Double. membuat satu buat kelas Koleksi, dan kelas tersebut dapat menampung seluruh objek Kelas Generic dengan tipe data yang berbeda. Misal sebelum menggunakan Generic package khannedy.unikom.generic.data; Programming, kita akan membuat kelas Koleksi untuk menampung String seperti ini : public class Koleksi<T> { package khannedy.unikom.generic.data; private T data; public class KoleksiString { public T getData() { return data; private String data; } public String getData() { public void setData(T data) { return data; this.data = data; } } } public void setData(String data) { this.data = data; } Dengan menggunakan Generic Programming } diatas, kita dapat membuat Koleksi yang dapat menampung object dengan tipe apapun. Namun perlu diingat, karena Generic Untuk menampung data Integer : Programming hanya dapat menggunakan object, sehingga data primitive harus package khannedy.unikom.generic.data; diimplementasikan dalam objek, misal int public class KoleksiInteger { menjadi Integer, double menjadi Double. private int data; package khannedy.unikom.generic; public int getData() { import return data; khannedy.unikom.generic.data.Koleksi; } public class Main { public void setData(int data) { this.data = data; public static void main(String[] args) {
  3. 3. Koleksi<String> a = new Koleksi<String>(); Atau : a.setData("String"); public <T> void kosongkan(T[] data) Koleksi<Integer> b = new Koleksi<Integer>(); b.setData(1); Perlu diingat jika Generic Programming } dalam sebuah Metode, hanya berlaku untuk } metode tersebut, tidak berlaku untuk metode yang lain dalam kelas yang sama, sehingga dibawah ini adalah salah : Pendeklarasian Generic Programming ditandai dengan simbol yang diawali tanda (<) dan package khannedy.unikom.generic.data; diakhiri tanda (>), setelah nama Kelas : public class Utilitas { class Koleksi<T> public <T> T ambilTengah(T[] data) { return data[data.length / 2]; Dari kode diatas, berarti kita membuat simbol } generic dengan simbol T, sehingga T dianggap tipe data dalam lingkup kelas tersebut. Saat // simbol T tidak dikenal pendeklarasian objek Koleksi, maka kita harus public T ambilAwal(T[] data){ menentukan tipe T tersebut : return data[0]; } Koleksi<String> a = new Koleksi<String>(); } Kode diatas berarti kita mengganti simbol T Pewarisan dengan tipe data String. Dalam Generic Programming pun dikenal Metode Generic dengan pewarisan, pewarisan ini digunakan untuk membatasi masukkan data yang dapat Selain dapat diimplementasikan dalam kelas, digunakan dalam kode generic. Secara default Generic Programming juga dapat simbol pada Generic Programming diimplementasikan dalam sebuah metode. merupakan turunan kelas Object, sehingga tipe data apapun dapat masuk ke kode package khannedy.unikom.generic.data; generic tersebut. public class Utilitas { public class Koleksi<T extends Object> public static <T> T ambilTengah(T[] data) { return data[data.length / 2]; Dan jika kita ingin membatasi kode generic } yang kita buat untuk kelas tertentu dan } turunannya, maka kita bisa memanfaatkan fitur pewarisan pada Generic Programming. Untuk membuat generic dalam metode, simbol dideklarasikan sebelum return value, Misal, kita memiliki kelas Musisi, dan kelas misal : MusisiBerbakat, dimana kelas MusisiBerbakat tersebut adalah turunan dari kelas Musisi. public <T> T ambilTengah(T[] data)
  4. 4. package khannedy.unikom.generic.data; tentukan. Misal pada kode diatas, kelas Musisi memiliki metode nyanyi(), dengan mewarisi public class Musisi { kelas Musisi dalam kode generic yang kita buat, maka kita dapat memanggil seluruh public void nyanyi() { metode yang ada pada kelas Musisi dalam // nyanyi } kode generic kita : } package khannedy.unikom.generic.data; package khannedy.unikom.generic.data; public class Koleksi <T extends Musisi> { public class MusisiBerbakat extends Musisi{ private T data; public void dansa() { public T getData() { // dansa return data; } } } public void setData(T data) { this.data = data; Jika kita akan membatasi kode generic yang } akan kita buat, hanya dapat digunakan untuk public void nyanyiEuy(){ kelas Musisi dan keturunannya, maka kita if(this.data != null){ dapat membuatnya seperti ini : this.data.nyanyi(); } package khannedy.unikom.generic.data; } } public class Koleksi <T extends Musisi> { Jika kita tidak mewarisi sebuah kelas, maka private T data; metode yang hanya dapat dipanggil public T getData() { hanyalah metode yang ada pada kelas return data; Object. } public void setData(T data) { this.data = data; } } Dengan demikian, maka kelas Koleksi yang baru, hanya dapat digunakan oleh kelas Musisi dan keturunannya. Pewarisan tidak hanya dapat diterapkan pada kelas generic, dapat juda di metode generic. Selain membatasi, dengan pewarisan kita juga dapat memanggil metode dari kelas yang kita
  5. 5. Java Collection Kode diatas, berarti kita membuat ArrayList yang digunakan untuk menampung data String. Untuk menambah data yang ada dalam Java Collection merupakan kumpulan- ArrayList, kita dapat menggunakan metode kumpulan kelas yang digunakan sebagai kelas add(T data) : struktur data, seperti array, linkedlist, stack, tree dan lain-lain. Seluruh kelas Java list.add("Data Baru"); Collection merupakan turunan kelas java.lang.Iterable. Sehingga dapat digunakan Dan untuk mengubah data yang telah ada dalam perulangan foreach. dalam ArrayList, kita bisa menggunakan package khannedy.unikom.generic; metode set(int index, T dataBaru) : public class Main { list.set(0, "Data Baru"); public static void main(String[] args) { String[] data = new String[10]; Index dalam ArrayList, sama dengan pada for (String a : data) { Array biasa, dimulai dari 0 dan diakhiri dengan // manipulasi a panjangArray-1. } } Untuk mendapatkan data yang ada dalam } ArrayList, kita dapat menggunakan metode get(int index) : Seluruh kelas-kelas Java Collection merupakan String data = list.get(10); kelas generic, sehingga dapat digunakan untuk menampung objek dengan berbadai Artinya kita menggambil data pada ArrayList tipe data. yang ke-11, hal ini dikarenakan index diawali ArrayList dari 0. ArrayList merupakan struktur data Array yang Untuk menghapus data dalam ArrayList, kita dapat berkembang kapasitasnya secara dapat menggunakan metode remove(int otomatis, sehingga berbeda dengan Array index) : biasa yang ukuran Array-nya terbatas saat list.remove(8); dideklarasikan. package khannedy.unikom.generic; Sama seperti metode get() dan set(), index pada metode remove() pun diawali dengan import java.util.ArrayList; index ke-0. public class Main { Untuk mendapatkan total data yang ada public static void main(String[] args) { dalam ArrayList, kita dapat menggunakan ArrayList<String> list = metode size() : new ArrayList<String>(); } int total = list.size(); }
  6. 6. Kekurangan ArrayList adalah, saat kita menghapus data maka data pada index setelah data yang dihapus, akan diubah indexnya ke index sebelumnya. Misal jika kita memiliki 100 data dalam ArrayList, lalu kita menghapus data index ke 20, maka proses yang terjadi adalah : 1. Hapus data ke 21 Seluruh operasi yang ada pada LinkedList 2. Tempatkan data ke 22 menjadi ke 21 hampir sama dengan yang ada pada ArrayList. 3. Tempatkan data ke 23 menjadi ke 22 Sehingga penggunaanya cukup sama dengan 4. Tempatkan data ke 24 menjadi ke 23 ArrayList. 5. Dan seterusnya hingga data terakhi package khannedy.unikom.generic; Sehinga ArrayList tidak cocok jika digunakan untuk menampung data yang banyak import java.util.LinkedList; menlakukan proses penghapusan data. public class Main { LinkedList public static void main(String[] args) { LinkedList merupakan struktur data yang LinkedList<String> list = setiap data nya memiliki pointer ke data new LinkedList<String>(); berikutnya dan data sebelumnya. Berbeda // tambah data dengan ArrayList, pada LinkedList data tidak list.add("Data Baru"); disimpan pada index. // ubah data list.set(0, "Data Baru Lagi"); // hapus data list.remove(0); // total data int total = list.size(); } } LinkedList merupakan sturktur data yang dapat digunakan sebagai solusi kekurangan pada ArrayList, yaitu pada saat penghapusan Namun yang menjadi permasalahan dalam data. Pada LinkedList, penghapusan data LinkedList yaitu saat proses, pencarian. hanya melakukan 3 langkah, misal kita Dikarenakan pada LinkedList, data tidak menghapus data ke 5 : memiliki index, maka saat terjadi proses pencarian, maka dilakukan secara sequensial, 1. Hapus data ke-5 sehingga dapat memperlambat proses 2. Ubah pointer next data ke-4 menjadi pencarian. mengacu ke data ke-6 3. Ubah pointer prev data ke-6 menjadi mengacu ke data ke-4
  7. 7. Set } Set merupakan struktur data yang digunakan @Override untuk menampung data yang datanya tidak public boolean equals(Object obj) { Mahasiswa m = (Mahasiswa) obj; boleh ada yang sama. Jika data yang sama, return m.nim == nim; maka data hanya akan ditampung sekali. } Set merupakan Interface, sehingga @Override dibutuhkan implementasi sebuah kelas untuk public int hashCode() { menggunakan Set. Dalam Java Collection, return nim; implementasi defaultnya adalah HashSet, } dimana HashSet melakukan pengecekan } duplikasi berdasarkan metode equals() dan hashCode(). Dengan demikian, maka kelas Mahasiswa, Secara default hashCode() setiap objek itu hashCode()–nya akan dicek berdasarkan Nim : unik dan defaulnya metode equals() package khannedy.unikom.generic; membandingkan objek pada memori, jika lokasi memorinya sama, maka dianggap sama, import java.util.HashSet; namun kita dapat membuat implementasi import java.util.Set; hashCode() sendiri, misal untuk Mahasiswa, import mahasiswa disebut sama jika memiliki Nim khannedy.unikom.generic.data.Mahasiswa; yang sama, Mahasiswa tidak dianggap sama public class Main { jika Nama nya sana, namun Nim nya berbeda, sehingga kita dapat membuat kelas public static void main(String[] args) { Mahasiswa seperti berikut : Set<Mahasiswa> set = new HashSet<Mahasiswa>(); package khannedy.unikom.generic.data; Mahasiswa a = new Mahasiswa(); public class Mahasiswa { a.setNim(1); a.setNama("Eko Kurniawan Khannedy"); private int nim; set.add(a); private String nama; Mahasiswa b = new Mahasiswa(); b.setNim(1); public String getNama() { b.setNama("Tukul Arwana"); return nama; set.add(b); } for (Mahasiswa m : set) { public void setNama(String nama) { System.out.println("Nim : " this.nama = nama; + m.getNim()); } System.out.println("Nama : " + m.getNama()); } public int getNim() { } return nim; } } public void setNim(int nim) { Maka hasilnya adalah : this.nim = nim;
  8. 8. Nim : 1 return 1; Nama : Eko Kurniawan Khannedy } else { return 0; } Artinya hanya mahasiswa dengan nama Eko } Kurniawan Khannedy saja yang masuk, } sedangkan Tukul Arwana tidak masuk, kenapa? Hal ini dikarenakan memiliki nim Dan jika kita implementasikan dalam TreeSet : yang sama yaitu 1. package khannedy.unikom.generic; TreeSet import java.util.TreeSet; TreeSet merupakan struktur data dimana data import yang ditampungnya akan otomatis di urutkan khannedy.unikom.generic.data.Mahasiswa; berdasarkan Comparator. public class Main { Interfaces Comparator<T>() { public int compare(T o1, T o2) { public static void main(String[] args) { } PembandingMahasiswa pembanding = } new PembandingMahasiswa(); TreeSet<Mahasiswa> set = Dalam Comparator, kita diwajibkan new TreeSet<Mahasiswa> membandingkan 2 buat objek dengan tipe (pembanding); data yang sama. Jika o1 lebih besar dari o2 maka return nya harus positif, jika lebih kecil Mahasiswa a = new Mahasiswa(); a.setNim(1); maka return nya harus negatif, jika sama a.setNama("Eko Kurniawan Khannedy"); maka return nya harus 0. set.add(a); Contoh, pada kelas Mahasiswa sebelumnya, Mahasiswa b = new Mahasiswa(); kita akan membandingkan tiap mahasiswa b.setNim(2); berdasarkan nim nya, namun b.setNama("Tukul Arwana"); dibandingkannya secara terbaik, artinya data set.add(b); akan diurutkan secara DESC. for (Mahasiswa m : set) { package khannedy.unikom.generic; System.out.println("Nim : " + m.getNim()); import java.util.Comparator; System.out.println("Nama : " import + m.getNama()); khannedy.unikom.generic.data.Mahasiswa; } } public class PembandingMahasiswa } implements Comparator<Mahasiswa> { public int compare(Mahasiswa o1, Maka hasilny adalah : Mahasiswa o2) { if (o1.getNim() > o2.getNim()) { Nim : 2 return -1; Nama : Tukul Arwana } else if (o1.getNim() < o2.getNim()) { Nim : 1 Nama : Eko Kurniawan Khannedy
  9. 9. Collection yang Lain Ada banyak sekali Collection dalam Java, seperti Stack, Vector, Map, Queue dan lain- lain. Resource Belajar http://java.sun.com/docs/books/tutorial/extra/generics/index.html http://java.sun.com/docs/books/tutorial/collections/index.html Ayo Berkomunitas!!! Milis Unikom Programming Team : http://tiny.cc/milis-unikom-prog-team Facebook Programming Team : http://tiny.cc/fb-unikom-prog-team OpenSource University Meetup : http://osum.sun.com/ OpenSource University Meetup UNIKOM : http://osum.sun.com/group/unikom

×