Rabu, 03 Mei 2017

Comparable dan Comparator

Pada kehidupan nyata, object-object sering dibandingkan, misal : • Mobil Andi lebih mahal dibandingkan dengan mobil Budi • Buku A lebih tebal dibandingkan dengan Buku B • Usia Andi lebih muda dibandingkan dengan usia Intan Dalam pemrograman object oriented, sering sekali ada kebutuhan untuk membandingkan object-object dari class yang sama, misalkan membandingkan object untuk mengurutkan data, pencarian data yang diurutkan berdasarkan umur. Pada kesempatan kali ini saya akan membahas bagaimana merancang object dari class agar bisa dibandingkan menggunakan interface java.lang.Comparable & java.util.Comparator. Mengurutkan Object String Untuk mengurutkan data String pada array gunakan Array.sort(). import java.util.Arrays; public class ArrayString { public static void main(String args[]){ String animals[] = new String[6]; animals[0] = "snake"; animals[1] = "kangaroo"; animals[2] = "wombat"; animals[3] = "bird"; System.out.println("\nSEBELUM DISORTING"); for (int i = 0; i < 4; i++) { System.out.println("animal " + i + " : " + animals[i]); } Arrays.sort(animals,0,4); System.out.println("\nSETELAH DISORTING"); for (int i = 0; i < 4; i++) { System.out.println("animal " + i + " : " + animals[i]); } } } Output : SEBELUM DISORTING animal 0 : snake animal 1 : kangaroo animal 2 : wombat animal 3 : bird SETELAH DISORTING animal 0 : bird animal 1 : kangaroo animal 2 : snake animal 3 : wombat Untuk mengurutkan data dalam ArrayList gunakan Collections.sort() import java.util.ArrayList; import java.util.Collections; public class SortList { public static void main(String args[]){ ArrayList insects = new ArrayList(); insects.add("mosquito"); insects.add("butterfly"); insects.add("dragonfly"); insects.add("fly"); System.out.println("\nSEBELUM DISORTING"); int size = insects.size(); for (int i = 0; i < size; i++) { System.out.println("insect " + i + " : " + (String) insects.get(i)); } Collections.sort(insects); System.out.println("\nSETELAH DISORTING"); for (int i = 0; i < size; i++) { System.out.println("insect " + i + " : " + (String) insects.get(i)); } } } Output : SEBELUM DISORTING insect 0 : mosquito insect 1 : butterfly insect 2 : dragonfly insect 3 : fly SETELAH DISORTING insect 0 : butterfly insect 1 : dragonfly insect 2 : fly insect 3 : mosquito Membuat Object yang Kita Definisikan Sendiri String dapat diurutkan, karena String mengimplementasikan interface Comparable. public final class String extends Object implements Serializable, Comparable, CharSequence Interface ini mempunyai sebuah method compareTo() yang menentukan bagaimana cara membandingkan antara dua object dari class tersebut. Bentuk methodnya: public int compareTo(Object o) Mehod compareTo() menerima Object, sehingga kita bisa memasukkan sembarang object, tapi harus mempunyai tipe yang sama. Kalau object yang kita masukkan adalah object yang berbeda maka melemparkan exception java.lang.ClassCastException. Return value dari method compareTo() • 0 jika dua object yang dibandingkan sama. • Bilangan positif, jika object 1 lebih besar dibandingkan dengan object 2 • Bilangan negatif, jika object 1 lebih kecil dibandingkan dengan object 2 Bagaimana caranya supaya bisa menggunakan Array.sort() pada contoh kasus diatas. Pada class Mahasiswa implementasikan interface Comparable, berarti harus mengimplementasikan method compareTo(). Isilah method ini dengan tujuan untuk membandingkan object dari class Mahasiswa berdasarkan umur. Jangan lupa untuk mengcasting object menjadi object dari class Mahasiswa terlebih dahulu. public class Mahasiswa implements Comparable { private String nrp ; private String nama ; public Mahasiswa(String nrp, String nama) { this.nrp = nrp; this.nama = nama; } public String getNama() { return nama; } public void setNama(String nama) { this.nama = nama; } public String getNrp() { return nrp; } public void setNrp(String nrp) { this.nrp = nrp; } @Override public String toString() { return "Mahasiswa{" + "nrp=" + nrp + " nama=" + nama + '}'; } public int compareTo(Object o) { Mahasiswa m2 = (Mahasiswa) o ; return this.nrp.compareTo(m2.nrp); } } Output : SEBELUM SORTING [Mahasiswa{nrp=05 nama=Cahya}, Mahasiswa{nrp=04 nama=Rudi}, Mahasiswa{nrp=01 nama=Endah}, Mahasiswa{nrp=03 nama=Rita}, Mahasiswa{nrp=02 nama=Tika}] SESUDAH SORTING [Mahasiswa{nrp=01 nama=Endah}, Mahasiswa{nrp=02 nama=Tika}, Mahasiswa{nrp=03 nama=Rita}, Mahasiswa{nrp=04 nama=Rudi}, Mahasiswa{nrp=05 nama=Cahya}] Penggunaan Class Comparator Dengan mengimplementasikan interface Comparable kita hanya bisa menentukan satu cara saja untuk membandingkan object. Kita masih memerlukan satu cara lagi untuk membandingkan object-object dari suatu class. Kita memerlukan comparator. Untuk membuat comparator, buat class yang mengimplementasikan interface java.util.Comparator, dan method compare(). public int compare(Object o1, Object o2) Return value dari method compare() • 0 jika dua object yang dibandingkan sama. • Bilangan positif, jika object 1 lebih besar dibandingkan dengan object 2 • Bilangan negatif, jika object 1 lebih kecil dibandingkan dengan object 2 Class Comparator public class NamaComparator implements Comparator { public int compare(Object o1, Object o2) { Mahasiswa m1 = (Mahasiswa) o1; Mahasiswa m2 = (Mahasiswa) o2; return m1.getNama().compareTo(m2.getNama()); } } Penggunaan Comparator pada Array.sort() public class TestMahasiswa2 { public static void main(String[] args) { Mahasiswa dataMhs[] = {new Mahasiswa("05", "Cahya"),new\ Mahasiswa("04", "Rudi"), new Mahasiswa("01", "Endah"),new Mahasiswa("03", "Rita"),new Mahasiswa("02", "Tika")}; System.out.println("SEBELUMSORTING"); System.out.println(Arrays.toString(dataMhs)); Arrays.sort(dataMhs, new NamaComparator()); System.out.println("\nSESUDAH SORTING"); System.out.println(Arrays.toString(dataMhs)); } } Output : Mengurutkan data mahasiswa berdasarkan Nama SEBELUM SORTING [Mahasiswa{nrp=05 nama=Cahya}, Mahasiswa{nrp=04 nama=Rudi}, Mahasiswa{nrp=01 nama=Endah}, Mahasiswa{nrp=03 nama=Rita}, Mahasiswa{nrp=02 nama=Tika}] SESUDAH SORTING [Mahasiswa{nrp=05 nama=Cahya}, Mahasiswa{nrp=01 nama=Endah}, Mahasiswa{nrp=03 nama=Rita}, Mahasiswa{nrp=04 nama=Rudi}, Mahasiswa{nrp=02 nama=Tika}]

2 komentar: