CodeGym /Blog Jawa /Acak /Tabel Hashtable Jawa
John Squirrels
tingkat
San Francisco

Tabel Hashtable Jawa

Diterbitake ing grup
Kelas Java Hashtable minangka salah sawijining anggota paling tuwa saka Java Collection Framework. Iki minangka implementasi struktur data tabel hash matematika. Ing Jawa hashtable internal ngemot ember ngendi tombol / pasangan nilai disimpen. Hashtable meh padha karo HashMap . Bentenipun paling pinunjul ing antarane: Hashtable diselarasake nalika HashMap ora.

Hashtable minangka struktur data

Hashtable minangka struktur data ing ngendi data disimpen ing format array. Saben nilai data nduweni nilai kunci sing unik. Yen kunci dikenal, akses menyang data sing dibutuhake cepet banget. Dadi, operasi selipan lan telusuran cepet kanthi bebas saka ukuran data. Tabel Hash kasusun saka array kanggo nyimpen data lan hashing kanggo generasi indeks ngendi unsur kudu dumunung. Apa hashing? Iku aturan sing peta Obyek menyang pesawat saka karakter (kode). Biasane fungsi kaya ngono ngowahi potongan data gedhe dadi nilai integer cilik. Fungsi hash bisa beda-beda, nanging kabeh ngirimake properti tartamtu:
  • Objek tartamtu nduweni kode hash tartamtu.
  • Loro obyek sing padha duwe kode hash sing padha. Kosok baline ora bener.
  • Yen rong kode hash beda, obyek kasebut mesthi ora padha.
  • Objek sing beda bisa uga duwe kode hash sing padha. Kedadeyan langka iki diarani tabrakan. Fungsi hash sing apik nyuda kemungkinan tabrakan.
Asil nglamar Fungsi Hash menyang Obyek nelpon kode hash .

Hashtable ing Jawa

Kelas Hashtable minangka implementasi struktur data tabel hash. Koleksi iki digawe luwih awal tinimbang Java Collection Framework, nanging banjur kalebu ing. Kaya kabeh koleksi "awal" (saka Jawa 1.0), hashtable disinkronake (meh kabeh cara ditandhani minangka sinkronisasi). Amarga faktor iki, hashtable duwe masalah kinerja sing signifikan. Mula, wiwit saka Java 1.2, umume disaranake nggunakake implementasi antarmuka Peta liyane amarga ora ana sinkronisasi. Biasane HashMap minangka panggantos sing paling cocog. Dadi Kelas Hashtable<K,V>kasusun saka tombol lan nilai. Iku nyimpen kunci ing prinsip hashing. Pasangan kunci-nilai disimpen ing "ember". Buckets bebarengan mbangun "tabel", jinis array internal. Hashtable nggunakake kode hash tombol kanggo nemtokake ember ing ngendi pasangan kunci/nilai kudu dipetakan. Fungsi hash ngidini sampeyan entuk lokasi ember saka kode hash Key. Fungsi iki ngasilake nomer integer kanggo obyek. Kaya sing kasebut ing ndhuwur, rong obyek sing padha duwe kode hash sing padha, dene rong obyek sing ora padha bisa uga ora duwe kode hash sing beda. Objek sing beda-beda, dilebokake ing tabel hash bisa uga duwe kode hash sing padha. Kanggo ngatasi masalah iki (tabrakan) array saka dhaptar digunakake ing hashtable. Pasangan sing dipetakan menyang ember siji disimpen ing dhaptar lan referensi dhaptar iki disimpen ing indeks array.

Konstruktor Jawa Hashtable

  • Hashtable() , konstruktor standar. Iku nggawe hashtable kosong. (Kapasitas wiwitan standar = 11, faktor beban = 0,75).
  • Hashtable (ukuran int) nggawe tabel hash kanthi ukuran sing ditemtokake.
  • Hashtable (ukuran int, float fillRatio) nggawe tabel hash ukuran lan rasio isi sing ditemtokake.
  • Hashtable(Map m) nggawe hashtable kanthi pemetaan sing padha karo Peta sing diwenehake.

Deklarasi Hashtable

Kelas Hashtable Java ngleksanakake antarmuka Map , Cloneable lan Serializable . Iku ngluwihi kelas Kamus .

Hashtable.java
public class Hashtable<K,V>
    extends Dictionary<K,V>
    implements Map<K,V>, Cloneable, java.io.Serializable
K minangka jinis tombol sing dikelola dening peta. V minangka jinis nilai sing dipetakan. Tuladha:

Hashtable<Student, Integer> myHTable = new Hashtable<>();

Cara ngimpor java hashtable

Java Hashtable ana ing paket java.util . Dadi nggunakake import java.util.Hashtable; ing kode sampeyan. Biasane sampeyan bakal entuk pitunjuk saka IDE babagan iki.

Operasi utama Hashtable

Operasi utama Hashtable yaiku njupuk, nglebokake koleksi lan mbusak saka kono. Ing kene telung operasi kasebut yaiku:
  • Obyek njaluk (tombol Obyek) ngasilake nilai Obyek sing wis ditemtokake tombol. Ngasilake null yen ora ana tombol kasebut ditemokake.
  • Obyek sijine (tombol Obyek, Nilai Obyek) peta kunci sing ditemtokake menyang nilai sing ditemtokake. Sanadyan tombol utawa nilai bisa null.
  • Obyek mbusak (tombol obyek) mbusak entri (kunci lan nilai sing cocog) saka tabel hash.
Operasi penting liyane:
  • int size () ngasilake jumlah entri ing tabel hash.
  • boolean ngemot (Nilai obyek) mriksa yen nilai kasebut ana ing tabel hash. Yen mangkono, metode ngasilake bener, liya ngasilake palsu.
  • boolean containsValue(Nilai obyek) mriksa yen nilai kasebut ana ing tabel hash. Yen mangkono, metode ngasilake bener, liya ngasilake palsu.
  • void clear () mbusak kabeh entri saka hashtable.
  • boolean containsKey (tombol Obyek) ngasilake bener yen tombol kasebut ana ing tabel hash, liya bali palsu.
  • boolean isEmpty () ngasilake bener yen tabel hash kosong utawa salah yen ngemot paling ora siji tombol.
  • void rehash () nambah ukuran hashtable lan rehashes kabeh tombol.

Implementasi tabel hash, kode Java:

Ayo nggawe kelas Siswa :

import java.util.Date;
public class Student {
   String surname;
   String name;
   String secondName;
   Long birthday; // Long instead of long is used by Gson/Jackson json parsers and various orm databases

   public Student(String surname, String name, String secondName, Date birthday ){
       this.surname = surname;
       this.name = name;
       this.secondName = secondName;
       this.birthday = birthday == null ? 0 : birthday.getTime();
   }

   @Override
   public int hashCode(){
       //TODO: check for nulls
       return (surname + name + secondName + birthday).hashCode();
   }
   @Override
   public boolean equals(Object other_) {
       Student other = (Student)other_;
       return (surname == null || surname.equals(other.surname) )
               && (name == null || name.equals(other.name))
               && (secondName == null || secondName.equals(other.secondName))
               && (birthday == null || birthday.equals(other.birthday));
   }
}
Punika conto Java Hashtable . Ayo sijine loro Obyek kelas Siswa menyang hashtable, banjur mbusak sawetara lan mriksa sawetara paramèter.

public class HashTableExample {
   public static void main(String[] args) {
 
       Hashtable<Student, Integer> myHTable = new Hashtable<>();
       Student sarah1 = new Student("Sarah","Connor", "Jane", null);
       Student john = new Student("John","Connor", "Kyle", new Date(1985, 02-1, 28)); // date not exists
       myHTable.put(john,1);
       myHTable.put(sarah1,0);
       System.out.println(myHTable.get(john));
       System.out.println(myHTable.isEmpty());
       System.out.println(myHTable.size());
       System.out.println(myHTable.contains(1));
       myHTable.remove(john);
       System.out.println(myHTable.contains(0));
       System.out.println(myHTable.contains(1));
       System.out.println(myHTable.containsKey(sarah1));
   }
}
Asil saka program sing mlaku yaiku:

1
false
2
true
true
false
true

HashMap vs Hashtable

  • Hashtable padha karo HashMap ing Jawa. Bentenane sing paling penting yaiku Hashtable disinkronake nalika HashMap ora. Mula, Hashtable luwih alon tinimbang HashMap amarga sinkronisasi.
  • Kajaba masalah sinkronisasi, Hashtable ora ngidini null digunakake minangka nilai utawa tombol. HashMap ngidini siji tombol null lan sawetara nilai null.
  • Hashtable marisi kelas Kamus nalika HashMap marisi kelas AbstractMap.
  • HashMap dilewati dening Iterator. Hashtable bisa diliwati ora mung dening Iterator nanging uga dening Enumerator.

Conto hashtable Java (Hashtable vs HashMap null key)

Punika kode fragmen kanggo nduduhake null sing digunakake minangka kunci lan nilai ing HashMap lan Hashtable

// Null key Java hashtable example and hashmap example  

try{
      System.out.println("Hashtable");
      Hashtable hashTable = new Hashtable();
      hashTable.put(null, new Object());
    }catch(Exception ex){
      ex.printStackTrace();
    }
    System.out.println("HashMap");
    HashMap hashMap = new HashMap();
    hashMap.put(null, new Object());
    System.out.println("as you see no exceptions with null key in HashMap");
  }
Asil saka mbukak program sing ngemot fragmen iki:

java.lang.NullPointerException
	at java.base/java.util.Hashtable.put(Hashtable.java:480)
	at Character.main(Character.java:58)
HashMap
as you see no exceptions with null key in HashMap

Kesimpulan

Sampeyan ora kerep nggunakake Hashtable ing proyek nyata, nanging gampang kanggo ketemu struktur data iki ing proyek lawas. Punapa mawon, iku penting kanggo ngerti apa Struktur Data Jawa wis lan cara kerjane, paling ora kanggo wawancara sampeyan.Biasane obyek HashMap digunakake tinimbang Hashtable amarga padha. HashMap luwih efektif (ora disinkronake) lan bisa null minangka kunci.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION