Java-da Hashtable


JavaBaxılıb 78

Sistem dizaynı ilə bağlı müsahibə sualları o qədər açıq ola bilər ki, düzgün hazırlaşmağı bilmək çox çətindir. İndi satın aldıqdan sonra Amazon, Microsoft və Adobe-nin dizayn dövrlərini sındıra bilirəm Bu kitabı. Gündəlik bir yenidən nəzərdən keçirin dizayn sualı və söz verirəm ki, dizayn dövrünü sındıra bilərsiniz.

Java-dakı Hashtable sinfi, Dictionary sinifini miras alır. Əvvəllər java.util-in bir hissəsi idi. Java 2-dən etibarən bu, Xəritə interfeysini də tətbiq edə biləcəyi üçün Koleksiyonlar çərçivəsinin bir hissəsidir. Buna bənzəyir HashMap lakin bu təlimin sonunda görəcəyimiz bir neçə fərq var. İndi Java-da HastTable haqqında məlumat əldə edəcəyik.

Java-da Hashtable

Hashtable açar dəyər şəklində girişləri ehtiva edir. Hər düymə bənzərsiz bir dəyəri olan bir obyektdir. Hashtable, açarın yığıldığı hashing texnikasından istifadə edir və nəticədə yaranan hashcodu açarın göstəricisi kimi istifadə edir. Həm düymələr, həm də dəyərlər sıfır olmayan bir dəyər olmalıdır.

HashMap meydana gəldikdən sonra hash masa məlumat quruluşunun ən qədim tətbiqlərindən biridir.

Java Hashtable Konstruktorları

Aşağıda inşaatçılar Java-da Hashtable-da.

İnşaatçılar təsvir
Hashtable ()Varsayılan tutumu və yükləmə faktoru ilə boş bir Hashtable yaradır
Hashtable (int tutumu)Müəyyən olunmuş tutuma malik hashtable yaradır
Hashtable (int tutumu, float loadfactor)Müəyyən edilmiş tutumu və yük faktoru ilə hashtable yaradır
Hashtable (Xəritə m)Göstərilən Xəritənin xəritəsi ilə hashtable yaradır

Java Hashtable Metodları

Hashtable Java aşağıdakı metodları ehtiva edir.

ÜsultəsvirParametr
boşluq təmiz ()Hashtable-ı elə təmizləyir ki, hər hansı bir əsas dəyər cütü olmayacaq
Obyekt klonu ()Hashtable-ın dayaz bir nüsxəsini yaradır
Simli hesablama (Tamsayı açar, BiFunction yenidənqurma funksiyası)Müəyyən edilmiş düymə və onun dəyəri üçün Xəritəçəkmə hesablamaq cəhdləriaçar - dəyərin əlaqələndirildiyi açar
remappingfunction - dəyəri hesablayan funksiya
String computeIfAbsent (Tam say açarı, Funksiyanın yenidən təyin edilməsi funksiyası)Göstərilən açarda heç bir dəyər yoxdursa, funksiyanı istifadə edərək dəyəri hesablamağa çalışır və onu daxil ediraçar - dəyərin əlaqələndirildiyi açar
remappingfunction - dəyəri hesablayan funksiya
String computeIfPresent (Tam say açarı, Funksiyanın yenidən təyin edilməsi funksiyası)Göstərilən açarda bir dəyər varsa, funksiyanı istifadə edərək dəyəri hesablamağa çalışır və onu daxil ediraçar - dəyərin əlaqələndirildiyi açar
remappingfunction - dəyəri hesablayan funksiya
boolean ehtiva edir (obyekt dəyəri)Hashtable-da göstərilən dəyərə malik bir açarın olub-olmadığını yoxlayırdəyər - açarın olub olmadığını yoxlamaq üçün hashtabledakı dəyər
booleanKey (obyekt açarı)Hashtable-da göstərilən açarın olub-olmadığını yoxlayıraçar - yoxlanılacaq açar
booleanValue ehtiva edir (obyekt dəyəri)Hashtable-da göstərilən dəyəri olub-olmadığını yoxlayırdəyər - yoxlanılacaq dəyər
Sayım elementləri ()Hashtabledakı elementlərin sayını qaytarır
EntrySet () təyin edinHashtabledakı uyğunlaşmaların müəyyən bir görünüşünü qaytarır
boolean bərabərdir (Object o)Göstərilən obyektin xəritəyə bərabər olub olmadığını yoxlayır
void forEach (İstehlakçı hərəkəti)Hashtable-dakı hər bir giriş üçün göstərilən əməliyyatı həyata keçirirfəaliyyət - tətbiq ediləcək hərəkət
String get (obyekt açarı)Göstərilən düymə ilə əlaqəli dəyəri alıraçar - dəyəri almalı olduğumuz açar
String getOrDefault (Nəzarət açarı, String defaultValue)Müəyyən edilmiş düymənin dəyərini qaytarır, başqa bir uyğunlaşma olmadığı təqdirdə, standart dəyəri qaytarıraçar - dəyəri almalı olduğumuz açar
defaultValue - açar üçün heç bir uyğunlaşma olmadıqda defaultValue
boolean isEmpty ()Hashtableın boş olub olmadığını yoxlayır
Siyahı açarları ()Həştədəki düymələrin sayını qaytarır
KeySet () seçinHashtabledakı düymələrin müəyyən bir görünüşünü qaytarır
String put (int key, String value)Göstərilən dəyəri olan açarı hashtable-a qoyuraçar - eşlenecek açar
dəyər - açarla əlaqəli dəyər
boşluqHamısı (Xəritə m)Göstərilən xəritənin bütün uyğunlaşdırılmasını hashtable-a qoyurm - hashtable-a kopyalanacaq xəritə
String putIfAbsent (Tam düymə, String dəyəri)Göstərilən açar dəyərlə əlaqəli deyilsə, göstərilən dəyərlə əlaqələndiriliraçar - eşlenecek açar
dəyər - açarla əlaqəli dəyər
Simli silmək (Nişan açarı)Açarı və dəyərini hashtabledan siləraçar - dəyərlə silinməli olan açar
boolean aradan qaldırılması (obyekt açarı, obyekt dəyəri)Girişi hashtabledan siliraçar - silinəcək düymə
dəyər - silinəcək düymə ilə əlaqəli dəyər
String əvəz (Tam düymə, String dəyəri)Hashtable-dakı açarı yalnız müəyyən bir dəyər içərsə dəyişdiriraçar - dəyəri olan açar
dəyər - dəyişdiriləcək dəyər
boolean əvəz (Tam düymə, String oldvalue, String newvalue)Hashtable-dakı girişi yalnız bir dəyər içərsə dəyişdiriraçar - dəyəri olan açar
oldvalue - köhnə dəyər əlaqələndirilir
yeni dəyər - xəritələnəcək yeni dəyər
void replaceAll (İşlev funksiyası)Hashtabledakı bütün girişləri funksiyanın nəticəsi ilə əvəz edirfunksiya - dəyərləri və girişləri əvəz etmək üçün funksiya çıxışı
int ölçüsü ()Hashtabledakı düymələrin sayını qaytarır
String toString ()Hashtable-dəki girişlərin bir sətir təmsilini qayda olaraq key = value və hər girişin "," ilə ayrıldığı şəkildə göstərildiyi yerdə qaytarır
Kolleksiya dəyərləri ()Hashtabledakı dəyərlərin kolleksiya görünüşünü qaytarır

Nümunə: Java-da hashtable-a girişlər əlavə edin

Aşağıdakı nümunədə, istifadə edirik put() girişləri açar dəyər cütləri kimi hashtable-a əlavə etmək üsulu. Göstərilən düyməni istifadə edərək mövcud deyilsə, hashtablea yeni bir giriş də əlavə edə bilərik putIfAbsent() metod. The computeIfAbsent funksiya çıxışını hashtable-da olmayan düymə üçün yeni bir giriş yaratmaq üçün bir dəyər olaraq istifadə edir.

import java.util.Hashtable;

public class HashtableDemo {

  public static void main(String[] args) {
    Hashtable<Integer, String> h = new Hashtable<Integer, String>();
    h.put(111,"Aditya");
    h.put(222, "Bharat");
    h.put(333, "Chetan");
    h.put(444, "Dev");
    h.put(555, "Harish");
    System.out.println(h);
    h.putIfAbsent(666, "Ganesh");
    System.out.println("Elements in the hashtable after using putIfAbsent:");
    System.out.println(h.toString());
    System.out.println("Elements in the hashtable after using computeIfAbsent:");
    h.computeIfAbsent(777, t -> "Banu");
    System.out.println(h.toString());
    
  }

}
{555=Harish, 444=Dev, 333=Chetan, 222=Bharat, 111=Aditya}
Elements in the hashtable after using putIfAbsent:
{666=Ganesh, 555=Harish, 444=Dev, 333=Chetan, 222=Bharat, 111=Aditya}
Elements in the hashtable after using computeIfAbsent:
{777=Banu, 666=Ganesh, 555=Harish, 444=Dev, 333=Chetan, 222=Bharat, 111=Aditya}

Nümunə: Java-da Hashtable-dan elementlərin silinməsi

Aşağıdakı elementlərdən Java-da hashtable-dan elementlərin necə silinəcəyini göstərmək üçün bir nümunədir remove() metod. Tutaq ki, hashtable-da olmayan bir açarı və ya dəyəri silməyə çalışırıq, sadəcə ifadəyə məhəl qoymur və növbəti sətrə keçir.

import java.util.Hashtable;

public class HashtableDemo {

  public static void main(String[] args) {
    Hashtable<Integer, String> h = new Hashtable<Integer, String>();
    h.put(111,"Aditya");
    h.put(222, "Bharat");
    h.put(333, "Chetan");
    h.put(444, "Dev");
    h.put(555, "Harish");
    System.out.println(h);
    
    h.remove(333);
    h.remove(444, "Dev");
    System.out.println("Elements after remove operation:");
    System.out.println(h);
    
  }

}
{555=Harish, 444=Dev, 333=Chetan, 222=Bharat, 111=Aditya}
Elements after remove operation:
{555=Harish, 222=Bharat, 111=Aditya}

Nümunə: Hashtable-dan elementləri yoxlayın və alın

Java Hashtable-da müəyyən bir dəyər və ya açarın olub olmadığını yoxlaya bilərik contains() or containsKey() or containsValue() metod. Müvafiq düymənin dəyərini almaq üçün istifadə edə bilərik get() metod və ya getOrDefault() metod. İçində getOrDefault() metod, axtarış açarı yoxdursa, keçdiyimiz standart dəyəri qaytarır.

import java.util.Hashtable;

public class HashtableDemo {

  public static void main(String[] args) {
    Hashtable<Integer, String> h = new Hashtable<Integer, String>();
    h.put(111,"Aditya");
    h.put(222, "Bharat");
    h.put(333, "Chetan");
    h.put(444, "Dev");
    h.put(555, "Harish");
    System.out.println(h);
    
    System.out.println("Check if hashtable contains Chetan: " + h.contains("Chetan"));
    System.out.println("Check if hashtable contains Jeeva: " + h.contains("Jeeva"));
    System.out.println("Check if hashtable contains the key 222: " + h.containsKey(222));
    System.out.println("Check if hashtable contains the key 123: " + h.containsKey(123));
    System.out.println("Check if hashtable contains Hari: " + h.containsValue("Hari"));
    System.out.println("Check if hashtable contains Aditya: " + h.containsValue("Aditya"));
    System.out.println("Get the value of key 444: " + h.get(444));
    System.out.println("Get the value of key 222: " + h.getOrDefault(222, "Test"));
    System.out.println("Get the value of key 123: " + h.getOrDefault(123, "Test"));
  
  
    
  }

}
{555=Harish, 444=Dev, 333=Chetan, 222=Bharat, 111=Aditya}
Check if hashtable contains Chetan: true
Check if hashtable contains Jeeva: false
Check if hashtable contains the key 222: true
Check if hashtable contains the key 123: false
Check if hashtable contains Hari: false
Check if hashtable contains Aditya: true
Get the value of key 444: Dev
Get the value of key 222: Bharat
Get the value of key 123: Test

Nümunə: Java-da hashtabledakı elementləri təkrarlayın

Aşağıdakı nümunə Java-dakı hashtable-dan açarları və dəyərləri necə təkrarlayacağınızı və ya götürəcəyinizi göstərir. The Enumerationvalues() metod hashtabledakı bütün dəyərləri qaytarır. The entrySet() metod həm açar dəyər cütlərini qaytarır. The keySet()keys() metod hashtabledakı bütün açarları alır.

import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Map.Entry;
import java.util.Set;

public class IterateHashtable {

  public static void main(String[] args) {
    Hashtable<Integer, String> h = new Hashtable<Integer, String>();
    h.put(111,"Aditya");
    h.put(222, "Bharat");
    h.put(333, "Chetan");
    h.put(444, "Dev");
    h.put(555, "Harish");
    
    System.out.println("Size of hashtable: " + h.size());
    
    Enumeration<String> e = h.elements();
    System.out.println("\nIterate using Enumeration:");
    while(e.hasMoreElements())
      System.out.print(e.nextElement() + " ");
    
    System.out.println();
    System.out.println("\nIterate using Entryset:");
    Set<Entry<Integer, String>> s = h.entrySet();
    System.out.println(s);
    
    System.out.println("\nIterate using Keys:");
    Enumeration<Integer> e1 = h.keys();
    while(e1.hasMoreElements())
      System.out.print(e1.nextElement() + " ");
    
    System.out.println();
    System.out.println("\nIterate using KeySet:");
    Set<Integer> s1 = h.keySet();
    System.out.println(s1);
    
    System.out.println("\nIterate using values:");
    System.out.println(h.values());
  
  }

}
Size of hashtable: 5

Iterate using Enumeration:
Harish Dev Chetan Bharat Aditya 

Iterate using Entryset:
[555=Harish, 444=Dev, 333=Chetan, 222=Bharat, 111=Aditya]

Iterate using Keys:
555 444 333 222 111 

Iterate using KeySet:
[555, 444, 333, 222, 111]

Iterate using values:
[Harish, Dev, Chetan, Bharat, Aditya]

Misal: hashtabledakı dəyərləri dəyişdirin

The replace() axtarış açarı varsa metod köhnə dəyəri yeni dəyərlə əvəz edir. Açar yoxdursa, görməzdən gəlir və növbəti sətrə keçir. Düymənin mövcud olmadığı üçün açar 123 üçün dəyərin dəyişdirilməməsinin səbəbi budur.

import java.util.Hashtable;

public class HashtableDemo {

  public static void main(String[] args) {
    Hashtable<Integer, String> h = new Hashtable<Integer, String>();
    h.put(111,"Aditya");
    h.put(222, "Bharat");
    h.put(333, "Chetan");
    h.put(444, "Dev");
    h.put(555, "Harish");
    System.out.println(h);
    
    h.replace(333, "Chandru");
    h.replace(444, "Dev", "Devi");
    
    h.replace(123, "aaa");
    
    System.out.println(h.toString());
  }

}
{555=Harish, 444=Dev, 333=Chetan, 222=Bharat, 111=Aditya}
{555=Harish, 444=Devi, 333=Chandru, 222=Bharat, 111=Aditya}

Nümunə: hashtabledakı bütün girişləri boşaltın və ya silin

İstifadə edərək hashtabledakı bütün qeydləri boş və ya silə bilərik clear() metod. Hashtable'ın boş olub olmadığını yoxlamaq üçün istifadə edə bilərik isEmpty() metodu.

import java.util.Hashtable;

public class HashtableDemo {

  public static void main(String[] args) {
    Hashtable<Integer, String> h = new Hashtable<Integer, String>();
    h.put(111,"Aditya");
    h.put(222, "Bharat");
    h.put(333, "Chetan");
    h.put(444, "Dev");
    h.put(555, "Harish");
    System.out.println(h);
    
    h.clear();
  
    System.out.println(h.toString());
    System.out.println("Is hashtable empty: " + h.isEmpty());
    
  }

}
{555=Harish, 444=Dev, 333=Chetan, 222=Bharat, 111=Aditya}
{}
Is hashtable empty: true

 

Hashtable və HashMap arasındakı fərq

Artıq hashtable və hashmap nə olduğunu bildiyimiz üçün hər ikisi arasındakı fərqləri görək.

HashMapHashtable
Sinxronizasiya edilmirSinxronizasiya olunur
Bu mövzuda təhlükəsiz deyil və iplər arasında paylaşıla bilməzİplik təhlükəsizdir və iplər arasında paylaşıla bilər
Bir sıfır düymə və birdən çox sıfır dəyər verirNull düyməyə və boş qiymətə icazə vermir
JDK 1.2-də təqdim edilmişdirBu miras sinifidir
Hashmap-dən keçmək üçün Iterator istifadə edirikHashtable-dan keçmək üçün Iterator və ya Enumeration istifadə edirik
AbstractMap sinifini miras alırLüğət sinifini miras alır
Hesablama sürətlidirHesablama yavaşdır

arayış

Crack Sistemi Dizayn Müsahibələri
Translate »