This is blog for Developer

Kamis, 04 Mei 2017

Comparable & Comparator

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}]
Share:

0 komentar:

Posting Komentar