Belajar Pemrograman Java Dari Dasar

Method hashCode() Pada Class String

Method int hashCode() pada class String akan mengembalikan kode hash dari string tersebut dalam bentuk Integer. Kode hash pada objek String ini dikomputasi sebagai:

s[0]*31^(n - 1) + s[1]*31^(n - 2) + ... + s[n - 1]

Dimana :
  • s[i] adalah karakter dari string
  • n adalah panjang (length) dari string
  • ^ adalah eksponen
Nilai hash dari string kosong adalah nol.


hashCode_Class_String


Method ini merupakan method default dan tidak menerima parameter apapun.

Perlu diketahui pada umumnya, jika dua objek String equal ketika diuji dengan method equals() maka nilai nilai hash code-nya juga akan sama.

Contoh:

public class Test_hashCode {
 
 public static void main(String [] args){
  
  String string1 = "Bahasa Java";
  String string2 = "Bahasa Java";
  String string3 = new String("Bahasa Java");
  
  /**
  Mengetahui nilai hash code masing-masing string
  */
  int hashString1 = string1.hashCode();
  int hashString2 = string2.hashCode();
  int hashString3 = string3.hashCode();
  
  /**
  Memeriksa jika string equal dengan method equals(), maka hash code-nya juga sama
  */ 
  boolean cek1 = string1.equals(string2) && string1.hashCode() == string2.hashCode();
  boolean cek2 = string1.equals(string3) && string1.hashCode() == string3.hashCode();
  
  /**
  Menampilkan hasil pengecekan
  */
  System.out.println("Hash code string1 adalah " + hashString1);
  System.out.println("Hash code string2 adalah " + hashString2);
  System.out.println("Hash code string3 adalah " + hashString3);
  
  System.out.println();
  
  System.out.println("Apakah string1 dan string 2 equal dan nilai hash code-nya sama? " + cek1);
  System.out.println("Apakah string1 dan string 3 equal dan nilai hash code-nya sama? " + cek2);
  
 }
}
Output :

Hash code string1 adalah -171848644
Hash code string2 adalah -171848644
Hash code string3 adalah -171848644

Apakah string1 dan string 2 equal dan nilai hash code-nya sama? true
Apakah string1 dan string 3 equal dan nilai hash code-nya sama? true

Walaupun demikian, menggunakan method hashCode() tidak disarankan untuk menguji dua string tersebut equal atau tidak, karena bisa saja kedua string itu tidak equal namun memiliki nilai hash code yang sama.


Contoh:

public class Test_hashCode {
 
 public static void main(String [] args){
  
  String string1 = "0-42L";
  String string2 = new String("0-43-");
  
  /**
  Mengetahui nilai hash code masing-masing string
  */
  int hashString1 = string1.hashCode();
  int hashString2 = string2.hashCode();
  
  
  /**
  Memeriksa jika string equal dengan method equals()
  */
  boolean cek1 = string1.equals(string2);
  
  /**
  Memeriksa apakah nilai hash code string1 dan string2 sama
  */
  boolean cek2 = string1.hashCode() == string2.hashCode();
  
  
  /**
  Menampilkan hasil pengecekan
  */
  System.out.println("Hash code string1 adalah " + hashString1);
  System.out.println("Hash code string2 adalah " + hashString2);
  
  System.out.println();
  
  System.out.println("Apakah string1 dan string 2 equal? " + cek1);
  System.out.println("Apakah nilai hash code string1 dan string 2 sama? " + cek2);
 }
}

Output:
Hash code string1 adalah 45721201
Hash code string2 adalah 45721201

Apakah string1 dan string 2 equal? false
Apakah nilai hash code string1 dan string 2 sama? true


Oleh karena itulah tidak disarankan untuk mengecek equality dari dua objek String menggunakan method hashCode().

Share on Facebook
Share on Twitter
Share on Google+

Artikel Menarik Lainnya :