Kepada pengunjung Yang Terhormat

Saya harap anda bahagia dengan postingan di Blog ini. anda senang,saya Melayang

Sunday 24 January 2021

toString pada bahasa pemrograman Java dsa6da4

 

toString pada bahasa pemrograman Java dsa6da4

Setiap class selalu  extends class Object, class Object  memiliki tujuh buah method, setiap method mempunyai tujuan tertentu. Method-method tersebut adalah :

wait()

notify()

notifyAll()

fnalize()

toString()

equals()

hashCode()

Method toString digunakan oleh Java untuk mendapatkan representasi String dari sebuah object atau  class.  Implementasi  default  dari  Class  object  adalah  mencetak  nama  class  diikuti  oleh “alamat memory dari object  tersebut”.  Mari kita lihat bagaimana implementasi  standard dari

method toString ini :

public class ToStringTest {

  public static void main(String[] args) {

     ToStringTest test = new  ToStringTest();

     System.out.println("implementasi toString dari class Object " +

       "menghasilkan : " + test);

  }

}

kalau kita compile dan jalankan kode di atas hasilnya :

$ javac ToStringTest.java

$ java ToStringTest

implementasi toString dari class Object menghasilkan : ToStringTest@54fc9944

$

terlihat  bahwa  string  yang  dikembalikan  dari  method  toString  tidak  deskriptif  sama  sekali, dengan mengoverride method toString kita bisa mendapatkan string yang lebih deskriptif untuk menggambarkan object tersebut. Misalnya seperti di bawah ini :

 public class ToStringTest {

  public String toString() {

    return "ini toString dari class  ToStringTest";

  }

  public static void main(String[] args) {

     ToStringTest test = new  ToStringTest();

     System.out.println("implementasi toString dari class Object " +

       "menghasilkan : " + test);

  }

}

Hasil eksekusi dari kode di atas akan menghasilkan output seperti di bawah ini :

$ javac ToStringTest.java

$ java ToStringTest

implementasi toString dari class Object menghasilkan :  ini toString dari class

ToStringTest

$

method toString banyak digunakan dalam aplikasi Java, salah satunya adalah menampilkan text di dalam komponen JcomboBox kalau item yang dimasukkan ke dalam JcomboBox adalah class yang kita buat sendiri, bukan tipe data primitif atau class wrapper.

 

BACA SELENGKAPNYA >>

Set pada pemrograman Java 7d8as7da6

 

Set pada pemrograman Java 7d8as7da6

Set adalah collection yang bersifat unik. Set digunakan kalau anda memerlukan collection yang isinya  harus  unik.  Defnisi  unik  diimplementasikan  dengan  mengoverride  method  equals  dan hashCode dari class yang akan dimasukkan ke dalam Set. Semua class wrapper seperti String telah mengoverride method equals dan hashCode sehingga dua buah object String dianggap sama kalau  string  yang  ada  di  dalamnya  sama.  Untuk  class  yang  kita  buat  sendiri,  seperti  class Customer, maka method equals dan hashCode harus dioverride dahulu sebelum dimasukkan ke dalam  Set.  Kalau  method  equals  dan  hashCode  tidak  dioverride  maka  dua  buah  object dianggap sama kalau keduanya merefer ke object yang sama di dalam memory, tidak seperti yang kita harapkan. Class implementasi dari interface Set yang paling sering digunakan adalah HashSet. Nilai yang dikembalikan oleh hashCode sangat penting dalam class HashSet. Nilai hashCode digunakan untuk  menentukan  di mana  object  tersebut  diletakkan  dalam “keranjang”  HashSet.  Ketika method add di panggil dengan parameter object, HashSet akan memaggil method hashCode dari object tersebut untuk menentukan di keranjang mana object akan diletakkan. Setelah ketemu nomer keranjangnya, dicek apakah keranjang tersebut kosong. Kalau kosong maka object  langsung  diletakkkan  di  keranjang  tersebut.  Kalau  keranjang  ada  isinya,  dilakukan pengetesan  menggunakan  method  equals,  kalau  ada  object  di  dalam  keranjang  ditest menggunakan  method  equals  menghasilkan  true,  maka  object  lama  akan  ditimpa  dengan object baru yang dimasukkan ke dalam HashSet menggunakan method add tadi.  Kecepatan  proses  pencarian  object  di  dalam  HashSet  tergantung  dari  bagaimana  kita melalukan perhitungan hashCode. Kalau misalnya kita selalu return nilai 1 untuk semua object, maka  semua  object  akan  diletakkan  dalam  satu  keranjang  yang  sama,  proses  pencarian menjadi linier (O(n)) karena object akan dibandingkan satu per satu menggunakan method equals. Kalau hashCode bersifat unik untuk setiap object, maka proses pencarianya sangat cepat yaitu O(1), HashSet akan memanggil method hashCode untuk mendapatkan nilainya.  Kalau nilai hashCode tidak selalu  unik, HashSet akan melihat di dalam keranjang tersebut adakah object di dalamnya, kalau ada satu buah maka object itu akan dikembalikan sebagai  hasil pencarian, kalau kosong yang dikembalikan adalah null, kalau ada beberapa buah maka untuk setiap object di dalam keranjang ditest menggunakan method equals, ketika method equals mengembalikan true maka object tersebut adalah hasil pencarianya.  Jika dua buah object  dipanggil  method equals  menghasilkan  nilai  true tetapi  hashCodenya berbeda (menyalahi aturan), maka oleh HashSet kedua object ini dianggap berbeda karena akan diletakkan di dalam keranjang yang berbeda, asal keranjangnya berbeda maka method equals akan diabaikan, tidak pernah dipanggil. Jadi harus ditaati aturan bahwa kalau dua buah object  dioperasikan  dengan  method  equals  mengembalikan  true,  nilai  hashCodenya  harus sama.

Perhatikan visualisasi HashSet yang berisi String di bawah ini :

Set pada pemrograman Java 7d8as7da6

Set adalah collection yang bersifat unik. Set digunakan kalau anda memerlukan collection yang isinya  harus  unik.  Defnisi  unik  diimplementasikan  dengan  mengoverride  method  equals  dan hashCode dari class yang akan dimasukkan ke dalam Set. Semua class wrapper seperti String telah mengoverride method equals dan hashCode sehingga dua buah object String dianggap sama kalau  string  yang  ada  di  dalamnya  sama.  Untuk  class  yang  kita  buat  sendiri,  seperti  class Customer, maka method equals dan hashCode harus dioverride dahulu sebelum dimasukkan ke dalam  Set.  Kalau  method  equals  dan  hashCode  tidak  dioverride  maka  dua  buah  object dianggap sama kalau keduanya merefer ke object yang sama di dalam memory, tidak seperti yang kita harapkan. Class implementasi dari interface Set yang paling sering digunakan adalah HashSet. Nilai yang dikembalikan oleh hashCode sangat penting dalam class HashSet. Nilai hashCode digunakan untuk  menentukan  di mana  object  tersebut  diletakkan  dalam “keranjang”  HashSet.  Ketika method add di panggil dengan parameter object, HashSet akan memaggil method hashCode dari object tersebut untuk menentukan di keranjang mana object akan diletakkan. Setelah ketemu nomer keranjangnya, dicek apakah keranjang tersebut kosong. Kalau kosong maka object  langsung  diletakkkan  di  keranjang  tersebut.  Kalau  keranjang  ada  isinya,  dilakukan pengetesan  menggunakan  method  equals,  kalau  ada  object  di  dalam  keranjang  ditest menggunakan  method  equals  menghasilkan  true,  maka  object  lama  akan  ditimpa  dengan object baru yang dimasukkan ke dalam HashSet menggunakan method add tadi.  Kecepatan  proses  pencarian  object  di  dalam  HashSet  tergantung  dari  bagaimana  kita melalukan perhitungan hashCode. Kalau misalnya kita selalu return nilai 1 untuk semua object, maka  semua  object  akan  diletakkan  dalam  satu  keranjang  yang  sama,  proses  pencarian menjadi linier (O(n)) karena object akan dibandingkan satu per satu menggunakan method equals. Kalau hashCode bersifat unik untuk setiap object, maka proses pencarianya sangat cepat yaitu O(1), HashSet akan memanggil method hashCode untuk mendapatkan nilainya.  Kalau nilai hashCode tidak selalu  unik, HashSet akan melihat di dalam keranjang tersebut adakah object di dalamnya, kalau ada satu buah maka object itu akan dikembalikan sebagai  hasil pencarian, kalau kosong yang dikembalikan adalah null, kalau ada beberapa buah maka untuk setiap object di dalam keranjang ditest menggunakan method equals, ketika method equals mengembalikan true maka object tersebut adalah hasil pencarianya.  Jika dua buah object  dipanggil  method equals  menghasilkan  nilai  true tetapi  hashCodenya berbeda (menyalahi aturan), maka oleh HashSet kedua object ini dianggap berbeda karena akan diletakkan di dalam keranjang yang berbeda, asal keranjangnya berbeda maka method equals akan diabaikan, tidak pernah dipanggil. Jadi harus ditaati aturan bahwa kalau dua buah object  dioperasikan  dengan  method  equals  mengembalikan  true,  nilai  hashCodenya  harus sama.

Perhatikan visualisasi HashSet yang berisi String di bawah ini :

 

Algoritma  sederhana  untuk  menghitung  hashCode  dari  class  String  adalah  menambahkan

urutan  dari  hurufnya,  misalnya  string  “a”  nilai  hashCodenya  1,  “b”  nilai  hashCodenya  2, sedangkan string “ab” dan “ba” nilai hashCodenya sama yaitu 3. Bisa kita lihat juga string “ab” dan “ba” diletakkan dalam keranjang yang sama karena hashCodenya sama, tetapi tidak saling timpa, hal ini karena “ab”.equals(“ba”) bernilai false.  Tujuh paragraf menerangkan tentang Set kok rasanya masih kurang kalau kalau belum melihat kode bagaimana menggunakan Set ini. Kita akan menggunakan class Customer yang sudah dioverride method equals dan hashCodenya di bab sebelumnya, perhatikan juga bahwa equals dan hashCode dari class Customer di atas , kemudian buat class di bawah ini di folder yang

sama dengan class Customer :

import java.util.Set;

import java.util.HashSet;

import java.util.Iterator;

 

public class CustomerSetTest{

  public static void main(String[] args) {

    Set<Customer> customers = new HashSet<Customer>();

    Customer id1 = new Customer();

    id1.setId(1l);

    customers.add(id1);

    Customer id2 = new Customer();

    id2.setId(2l);

    customers.add(id2);

    Customer c = new Customer();

    c.setId(1l);

    customers.add(c); //mereplace id1 karena mempunyai id yang sama

    Iterator<Customer> i = customers.getIterator();

    while(i.hasNext()){

       Customer current = i.next();

       System.out.println("keranjang no-" + current.hashCode()

         + " idnya:" + current.getId());

    }

  }

}

Perhatikan juga kode di atas menggunakan Iterator untuk mengambil nilai dalam Set satu per satu, ada bentuk for each yang diperkenalkan sebagai bagian dari Java 5 Language enhancement, bentuk for each ini menyederhanakan kode untuk mengakses item di dalam Set. For each akan kita bahas di bab tentang java 5 languge enhancement. Hasil eksekusi kode di atas adalah seperti

di bawah ini :

$ javac Customer.java CustomerSetTest.java Customer.java

$ java CustomerSetTest

keranjang no-373 idnya:2

keranjang no-372 idnya:1

$

Anda mungkin juga terkejut, ternyata nomor keranjangnya pun tidak terurut dari kecil ke besar. HashSet adalah collection yang hanya menekankan pada sifat unik saja, sedangkan urutan dan keteraturan tidak dijamin sama sekali. Ada jenis collection lain yang bisa menjamin sifat unik sekaligus terurut, yaitu TreeSet, kita akan membahas tentang TreeSet nanti di bab setelah kita bahas konsep sorting.

 

BACA SELENGKAPNYA >>

iklan popcash