Comparable
& 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<String>, 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}]