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:

Map

Percobaan Map

Output :
Share:

Selasa, 02 Mei 2017

Collection

Collection


List
List adalah salah satu interface yang terdapat pada Java collection. Interface ini memiliki beberapa implementation class seperti LinkedList, Vector, ArrayList, AbstractList, dan lain-lain.

Salah satu ciri dari List adalah :objek-objeknya memiliki urutan tertentu untuk mengaksesnya (ordered) seperti dengan penggunaan nomor index atau dengan melakukan pencarian berdasarkan nilai tertentu dari objek. Urutan ini bisa berbeda dari tiap class yang mengimplementasikan interface List ini.Nomor index yang digunakan dimulai dari angka 0 (zero based index).Elemen-elemennya bisa memiliki objek yang sama (duplikat).

Contoh PenggunaanBerikut adalah kode contoh penggunaan method dasar beberapa class implementasi dari List dan hasil eksekusinya. Terlihat output yang dihasilkan sama semua karena implementasi method yang digunakan masih standar dan tidak spesifik ke tiap class.

Output :


Set
Set merupakan pengelompokan yang berupa model himpunan dimana setiap anggotanya harus unik.. Urutan maupun letak dari anggotanya tidaklah penting, hanya keberadaan anggotanya saja yang penting.
Contohnya :

Output :


Map
Perbedaaan mendasar map dengan collection yang lain, untuk menyimpan objek pada Map, perlu sepasang objek, yaitu key yang bersifat unik dan nilai yang disimpan. Untuk mengakses nilai tersebut maka kita perlu mengetahui key dari nilai tersebut.

Class-class yang mengimplementasikan Map adalah Hashtable,HashMap, LinkedHashMap. Untuk mengurutkan Map menggunakan interface SortedMap, class yang mengimplementasikan interface tersebut adalah TreeMap.
Contohnya :

Output :
Share:

Cara Menangani Exception

ArrayStroeException


ArithmeticException


ArrayIndexOutOfBoundsException


StringIndexOutOfBoundsException


NullPointerException


NoSuchElementException


ClassCastException


NegativeArraySizeException


NumberFormatException
Share:

Exception

Menangani Exception


Exception adalah suatu kondisi abnormal yang terjadi saat menjalankan program. Exception direpresentasikan dalam sebuah objek yang menjelaskan tentang exception tersebut. Salah satu contoh exception adalah pembagian bilangan dengan 0.
Terdapat dua penanganan exception yaitu:
  • Menangani sendiri.
  • Meneruskannya keluar dengan membuat objek exception tersebut dan melemparkannya (throw) keluar agar ditangani oleh kode yang memanggil method(yang didalamnya terdapat exception)tersebut.

Ada lima keyword yang digunakan oleh Java untuk menangani exception yaitu try, catch, finally, throw dan throws.


Tipe-tipe Exception
pada exception, superclass tertinggi adalah class Throwable, tetapi kita hampir tidak pernah menggunakan class ini secara langsung. Dibawah class Throwable terdapat dua subclass yaitu class Error dan Exception.
Class Error tidak ditangani dengan block try-catch, karena berhubungan dengan Java run-time system/environment. Untuk exception dengan tipe class Exception, merupakan exception yang dapat ditangani program.
Terdapat subclass dari class Exception diantaranya RunTimeException, IOException, AWTException dan lain-lain. Exception bertipe RunTimeException dan turunanya tidak harus secara eksplisit ditangani program (Unchecked Exception). Sedangkan semua tipe exception yang bukan turunan dari class RunTimeException merupakan exception yang harus ditangani atau jika tidak ditangani menyebabkan error.
Dibawah ini adalah hirarki dari exception.









Penggunaan Blok try-catch
Untuk menangani exception dalam program, dengan meletakkan kode program yang
memungkinkan terjadinya exception didalam blok try, diikuti dengan blok catch yang
menentukan jenis exception yang ingin ditangani. Contoh :

        public class Percobaan2 {
                    public static void main(String[] args) {
                                    int a[] = new int[5];
                                     try{
                                          a[5] = 100 ;
                                     }catch(ArrayIndexOutOfBoundsException e){
                                              System.out.println("Indeks Array melebihi batas");
                                     }
                                      System.out.println("Setelah blok try-catch");
                               }


Output :

Terjadi exception karena Indeks Array melebihi batas
Setelah blok try-catch


Kode yang terdapat dalam blok try dapat mengakibatkan lebih dari satu exception. Dalam hal ini, kita dapat menulis lebih dari satu blok catch. Blok catch yang dijalankan tergantung dengan exception yang terjadi. Java akan menjalankan blok catch yang sesuai dengan tipe exceptionnya saja. Dalam penggunaannya, blok catch dengan tipe subclass harus ditulis lebih dahulu baru diikuti
dengan blok catch dengan tipe data superclassnya.



Menggunakan Keyword “finally”

Terdapat kode yang harus dijalankan walaupun terjadi atau tidak terjadi exception,
misalkan kita membuka file, hal ini memungkinkan terjadinya exception misal file tidak
ada, file tidak bisa dibuka, selanjutnya yang harus dilakukan adalah menutup file
tersebut.

           public class Percobaan2 {
                       public static void main(String[] args) {
                                  int a[] = new int[5];
                                  try{
                                       a[5] = 100 ;
                                   }catch(ArrayIndexOutOfBoundsException e){
                                        System.out.println("Terjadi exception karena Indeks Array melebihi batas");
                                   }finally{
                                              System.out.println("Selalu Dijalankan");
                                   }
                                   System.out.println("Setelah blok try-catch");
                            }
                     }


Menggunakan Keyword “throw” dan “throws”

Secara eksplisit, kita dapat melempar (throw) exception dari program menggunakan
keyword throw. Jika exception tersebut adalah checked exception, maka pada method
harus ditambahkan throws. Jika exception tersebut adalah unchecked exception, maka
pada method tidak perlu ditambahkan throws.

            public class Percobaan6 {
                        public static void method1() throws FileNotFoundException{
                                    throw new FileNotFoundException("File Tidak Ada");
                                }
                        public static void main(String[] args) {
                                   try {
                                     method1();
                                   } catch (FileNotFoundException ex) {
                                                System.out.println(ex.getMessage());
                                     }
                               }
                        }







Membuat sendiri Subclass dari Exception

Untuk melakukan ini, kita cukup membuat class baru yang merupakan subclass
Exception. Didalam class ini kita cukup mendeklarasikan konstruktor.

             class Salah extends Exception{
                      public Salah(){}
                      public Salah(String pesan){
                                      super(pesan);
                         }

                   }
Share: