570 likes | 1.15k Views
Java Collection Framework. Outlines. Memahami Collection Framework di Java Memahami struktur JCF Mampu mengimplementasi JCF Mengetahui perbedaan beberapa concrete class di JCF. Framework.
E N D
Outlines • Memahami Collection Framework di Java • Memahami struktur JCF • Mampu mengimplementasi JCF • Mengetahui perbedaan beberapa concrete class di JCF
Framework • Framework : Koleksi atau kumpulan potongan-potongan program yang disusun atau diorganisasikan sedemikian rupa, sehingga dapat digunakan untuk membantu membuat aplikasi utuh tanpa harus membuat semua kodenya dari awal.
Framework • Framework adalah kumpulan fungsi (libraries), sehingga seorang programmer tidak perlu lagi membuat fungsi-fungsi (biasanya disebut kumpulan library) dari awal, programmer tinggal memanggil kumpulan library atau fungsi yang sudah ada didalam framework, tentunya cara menggunakan fungsi-fungsi itu sudah ditentukan oleh framework.
Collection Framework • Collection Framework adalah arsitektur di Java untuk merepresentasi dan memanipulasi collections. • Meliputi: • Interface: tipe data abstract yang merepresentasikan collections • Implementation: berupa implementasi concrete dari interface yang ada • Algorithm: adalah method yang berguna untuk memanipulasi collections, seperti searching dan shorting • Method ini bersifat polymorphic, karena bisa diterapkan pada implementasi yang berbeda
Hierarki Java Collection Framework • Jika array adalah tempat sekumpulan elemen. Maka Collection adalah tempat sekumpulan objek. • Collection : suatu wadah/container yang menapung sekumpulan object. • Java Collection Framework mendukung tiga jenis collections utama, yakni: • set • list • map
Hirarki Iterator ListIterator
JCF Interfaces dan Classes • Interfaces: • Collection • Set (tidak ada duplikasi) • SortedSet • List (bisa ada duplikasi) • Map (mis: Dictionary) • SortedMap • Iterator • Iterable • ListIterator • Classes: • HashSet • TreeSet • ArrayList • LinkedList • HashMap • TreeMap
Interface Iterator Iterator ListIterator
Interface Iterator • Iterator adalah interface yang dapat digunakan untuk mengontrol object yang mengimplementasi interface ini (untuk selanjutnya object ini disebut object iterator) • Dengan object iterator, kita dapat menelusuri semua object yang ada dalam collection
Interface Iterator • boolean hasNext(); • untuk memeriksa apakah object berikutnya ada atau tidak • E next(); • untuk mendapatkan object berikutnya • void remove(); • dipanggil setelah menjalankan method next() • menghapus object yang sudah dipanggil dengan next() terakhir • setelah memanggil next(), tidak bisa menjalankan remove() dua kali, pemanggilan kedua menyebabkan munculnya exception
Interface Collection • public int size(); • Mengembalikan angka yang merupakan jumlah object dalam collection • public boolean isEmpty(); • Mengembalikan nilai true bila tidak ada object dalam collection • public boolean add(E x); • Untuk memasukkan satu atau beberapa object ke collection. Pengembaliannya adalah true jika berhasil menambah. (beberapa jenis collection tidak mengijinkan duplikasi, sehingga proses add bisa saja gagal) • public boolean contains(Object x); • Untuk mengecek bahwa collection yang dimaksud mengandung object x • public boolean remove(Object x); • Menghapus sebuah object x dari collection. Kembalian bernilai true, jika ada object yang dihapus • public Iterator<E> iterator(); • Mengembalikan sebuah iterator yang digunakan untuk menelusuri object di collection
Interface Set • Set extends collection • Set menuruni semua method milik Collection • Set tidak memperbolehkan adanya duplikasi object di koleksinya • Jika ingin menambah elemen dua kali dengan “add()” maka “add()” yang kedua akan mengembalikan nilai false • Untuk mengakses object-object di Set, digunakan Iterator • Representasi Set adalah seperti group, misal group musik, group mata kuliah
Implementasi Set (Concrete Class) • java.util.HashSet<E> (merupakan hashtable) • Constructors: • public HashSet(); • public HashSet(Collection<? extends E> c); • public HashSet(int initialCapacity); • public HashSet(int initialCapacity, float loadFactor); • java.util.TreeSet<E> (merupakan balance BST) • Constructors • public TreeSet(); • public TreeSet(Collection<? extends E> c); • .............
Contoh Penggunaan Set import java.util.HashSet; import java.util.Iterator; import java.util.Set; publicclass ContohSet { staticpublicvoid main(String[] args) { Set<Integer> set = new HashSet<Integer>(); // membuat object HashSet // yang menghandle object Integer settingSet(set); // setting isi koleksi printSet(set); // menampilkan isi koleksi settingSet(set); // setting isi koleksi printSet(set); // tampilkan koleksi } staticprivatevoid settingSet(Set<Integer> set){ set.removeAll(set); // mengosongkan isi koleksi for (int i = 1; i < 10000; i *= 2) { set.add(i); // menambahkan object ke koleksi } } staticprivatevoid printSet(Set<Integer> set){ Iterator itr = set.iterator(); // mendapatkan object iterator dari koleksi while(itr.hasNext()) System.out.print(itr.next()+" "); // menampilkan isi koleksi System.out.println(); } }
Contoh Penggunaan Set • Object di dalam Set tidak urut • tidak urut berdasar urutan input • tidak urut berdasarkan nilai data di object • Program di atas bisa saja menghasilkan hasil sbb: • 1 4096 8192 2 32 4 64 512 8 1024 128 2048 16 256 • 4096 1 8192 32 2 512 64 4 1024 8 128 2048 16 256
Interface SortedSet • SortedSet memiliki fitur yang sama dengan Set, namun object yang tersimpan diurutkan berdasarkan datanya • SortedSet biasanya dikombinasikan dengan TreeSet • Efek penggunaan SortedSet, proses penambahan data jadi lebih lambat daripada Set biasa
Contoh Penggunaan SortedSet import java.util.Iterator; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; publicclass ContohSortedSet { staticpublicvoid main(String[] args) { SortedSet<Integer> set = new TreeSet<Integer>(); // membuat object TreeSet // kemudiandihandleoleh SortedSet settingSet(set); // setting isikoleksi printSet(set); // tampilkankoleksi } staticprivatevoid settingSet(SortedSet<Integer> set) { set.removeAll(set); // kosongkanisikoleksi for (int i = 10000; i > 0; i /= 2) { set.add(i); // menambah object kekoleksi } // secara descending } staticprivatevoid printSet(SortedSet<Integer> set) { Iterator itr = set.iterator(); // mendapatkan object iterator darikoleksi while (itr.hasNext()) System.out.print(itr.next() + " "); // menampilkanisikoleksi System.out.println(); } }
Contoh Penggunaan SortedSet • Hasil dari program di atas adalah: • 1 2 4 9 19 39 78 156 312 625 1250 2500 5000 10000 • Jadi meskipun penambahan object integer ke koleksi dimulai dari nilai besar ke nilai kecil, object yang disimpan otomatis diorganisasi urut dari kecil ke besar
Interface List • List extends Collection • Items/Objects di List dapat diakses menggunakan posisinya / indeksnya • Method “add()” menambahkan object baru di bagian paling belakang dari list • List cocok digunakan untuk mengganti Array, dengan ukuran yang dinamis
Interface List • Method tambahan yang merupakan tambahan baru dari yg dituruni dari interface Collection • public E get(int index) • mengembalikan object di posisi yang ditunjukkan index • public E set(int index, E x) • mengganti object di posisi index dengan object x, dan mengembalikan object yang telah diganti • public void add(int index, E x) • menambahkan object E ke posisi x, object lama di posisi x sampai posisi terakhir digeser satu posisi ke belakang • public E remove(int index) • menghapus object di posisi x, kemudian menggeser di belakang object yang dihapus satu posisi kedepan • return object yang dihapus • public int indexOf(Object e) • Mengembalikan indeks/posisi dari object e
Implementasi List (Concrete Class) • java.util.ArrayList<E> (representasi array) • Constructors: • public ArrayList(); • public ArrayList(int initialCapacity) • public ArrayList(Collection<? extends E> c); • java.util.LinkedList<E> (dobel linked list) • Constructors: • public LinkedList(); • public LinkedList(Collection<? extends E> c); • Kedua-duanya memiliki tambahan method yang specifik untuk masing-masing class
Contoh Penggunaan List import java.util.ArrayList; import java.util.List; publicclass ContohList { publicstaticvoid main(String[] args) { List<String> list = new ArrayList<String>(); loadData(list); tampilkanList(list); } privatestaticvoid loadData(List<String> list) { list.add("nol"); list.add("satu"); list.add("dua"); list.add("tiga"); list.add("empat"); } privatestaticvoid tampilkanList(List<String> list) { for (int i = 0; i < list.size(); i++) System.out.print(list.get(i) + " "); // menampilkanisikoleksi System.out.println(); } }
Contoh Penggunaan List • Struktur ArrayList mirip dengan Array biasa. Kelebihannya, ukurannya lebih dinamis, bisa bertambah dan berkurang • Hasil program di atas adalah: • nol satu dua tiga empat
Interface Map • Map digunakan untuk memetakan kunci dan data. Sebagai contoh, kita memiliki suatu katalog buku, kode buku adalah kunci dan object buku adalah datanya • Kunci di Map tidak dapat diduplikasi • Tiap kunci hanya menunjuk ke satu object data • Penggunaan Map biasanya dipadukan dengan class HashMap
Interface Map • Method yang ada di Map: • V put(K key, V value); • untuk menambahkan pasangan kunci dan object • V get(Object key); • untuk mendapatkan object berdasarkan kunci tertentu • V remove(Object key); • untuk menghapus object berdasarkan kunci tertentu • boolean containsKey(Object key); • memeriksa apakan map memiliki kunci tertentu • boolean containsValue(Object value); • memeriksa apakah map memiliki object tertentu • int size(); • mendapatkan jumlah key di map • public Set<K> keySet(); • mendapatkan keseluruhan key yang berupa Set • public Collection<V> values(); • mendapatkan keseluruhan object data yang berupa collection
Implementasi Map • java.util.HashMap<K,V> • Constructors: • public HashMap<K,V>(); • public HashMap<K,V>(int initialCapacity) • public HashMap<K,V>(Collection<? extends E> c); • java.util.TreeMap<K,V> • Constructors: • public TreeMap<K,V>(); • public LinkedList<K,V>(Collection<? extends E> c); • Kedua-duanya memiliki tambahan method yang specifik untuk masing-masing class
ContohPenggunaan Map import java.util.HashMap; import java.util.Iterator; import java.util.Map; publicclass ContohMap { /** * @param args */ publicstaticvoid main(String[] args) { Map<String, Makanan> map = new HashMap<String, ContohMap.Makanan>(); ContohMap ob = new ContohMap(); ob.loadData(map); ob.tampilkanList(map); } void loadData(Map map) { map.put("Soto", new Makanan("Soto", 5000)); map.put("Rujak", new Makanan("Rujak", 5500)); map.put("Opor", new Makanan("Opor", 7000)); } void tampilkanList(Map map) { Iterator<String> itr = map.keySet().iterator(); while (itr.hasNext()) { String nama = itr.next(); System.out.println(nama + " " + ((Makanan) map.get(nama)).getHarga()); } }
ContohPenggunaan Map publicclass Makanan { String namaMakanan; intharga; Makanan(String nama, int harga) { namaMakanan = nama; this.harga = harga; } publicint getHarga() { returnharga; } } }
Contoh Penggunaan Map • Map sesuai untuk membuat struktur key dan value (kunci dan data) • kunci ===> data • Pada contoh di atas, yang jadi kunci adalah nama makanan, datanya adalah object makanan