Java WeakHashMap

Bu eğitimde, örnekler yardımıyla Java WeakHashMap ve işlemlerini öğreneceğiz. WeakHashMap ve HashMap arasındaki farkları da öğreneceğiz.

WeakHashMapJava koleksiyonları çerçeve sınıf karma tablo veri yapısının özelliği sağlar …

Harita arayüzünü uygular.

Not : Zayıf hashmap anahtarları WeakReference tipindedir.

Referans artık programda kullanılmıyorsa, zayıf referans türünün nesnesi Java'da çöp olarak toplanabilir.

Önce zayıf bir hash haritası oluşturmayı öğrenelim. Ardından, hashmap'ten nasıl farklı olduğunu öğreneceğiz.

Bir WeakHashMap oluşturun

Zayıf bir hashmap oluşturmak için önce java.util.WeakHashMappaketi içe aktarmalıyız . Paketi içe aktardıktan sonra, Java'da zayıf hashmap'leri nasıl oluşturabileceğimizi burada bulabilirsiniz.

 //WeakHashMap creation with capacity 8 and load factor 0.6 WeakHashMap numbers = new WeakHashMap(8, 0.6); 

Yukarıdaki kodda, sayılar adlı zayıf bir hashmap oluşturduk.

Buraya,

  • Anahtar - bir haritadaki her bir öğeyi (değeri) ilişkilendirmek için kullanılan benzersiz bir tanımlayıcı
  • Değer - bir haritadaki anahtarlarla ilişkilendirilen öğeler

Parçaya dikkat edin new WeakHashMap(8, 0.6). Burada ilk parametre kapasite ve ikinci parametre loadFactor'dür .

  • kapasite - Bu haritanın kapasitesi 8'dir. Yani, 8 giriş saklayabilir.
  • loadFactor - Bu haritanın yük faktörü 0,6'dır . Bu, hash tablomuz her% 60 doldurulduğunda, girişlerin orijinal hash tablosunun iki katı boyutunda yeni bir hash tablosuna taşındığı anlamına gelir.

Varsayılan kapasite ve yük faktörü

Kapasitesini ve yük faktörünü tanımlamadan zayıf bir hashmap oluşturmak mümkündür. Örneğin,

 // WeakHashMap with default capacity and load factor WeakHashMap numbers1 = new WeakHashMap(); 

Varsayılan olarak,

  • haritanın kapasitesi 16 olacak
  • yük faktörü 0,75 olacaktır

HashMap ve WeakHashMap Arasındaki Farklar

Java'da zayıf bir hashmap uygulamasına bakalım.

 import java.util.WeakHashMap; class Main ( public static void main(String() args) ( // Creating WeakHashMap of numbers WeakHashMap numbers = new WeakHashMap(); String two = new String("Two"); Integer twoValue = 2; String four = new String("Four"); Integer fourValue = 4; // Inserting elements numbers.put(two, twoValue); numbers.put(four, fourValue); System.out.println("WeakHashMap: " + numbers); // Make the reference null two = null; // Perform garbage collection System.gc(); System.out.println("WeakHashMap after garbage collection: " + numbers); ) ) 

Çıktı

 WeakHashMap: (Dört = 4, İki = 2) Çöp toplamadan sonra WeakHashMap: (Dört) 

Gördüğümüz gibi, zayıf bir hashmap'in anahtar ikisi ayarlandığında nullve çöp toplama işlemi gerçekleştirdiğinde, anahtar kaldırılır.

Bunun nedeni, hashmap'lerin aksine, zayıf hashmap'lerin anahtarlarının zayıf referans tipinde olmasıdır. Bu, o girişin anahtarı artık kullanılmıyorsa, bir haritanın girişinin çöp toplayıcı tarafından kaldırıldığı anlamına gelir. Bu, kaynakları korumak için kullanışlıdır.

Şimdi aynı uygulamayı bir hashmap'te görelim.

 import java.util.HashMap; class Main ( public static void main(String() args) ( // Creating HashMap of even numbers HashMap numbers = new HashMap(); String two = new String("Two"); Integer twoValue = 2; String four = new String("Four"); Integer fourValue = 4; // Inserting elements numbers.put(two, twoValue); numbers.put(four, fourValue); System.out.println("HashMap: " + numbers); // Make the reference null two = null; // Perform garbage collection System.gc(); System.out.println("HashMap after garbage collection: " + numbers); ) ) 

Çıktı

 HashMap: (Dört = 4, İki = 2) Çöp toplamadan sonra HashMap: (Dört = 4, İki = 2) 

Burada, hashmap'in iki anahtarı olarak ayarlandığında nullve çöp toplama işlemi gerçekleştirildiğinde, anahtar kaldırılmaz.

Bunun nedeni, zayıf hashmap'lerin aksine, hashmap anahtarlarının güçlü referans türünde olmasıdır. Bu, o girişin anahtarı artık kullanılmasa bile, bir haritanın girişinin çöp toplayıcı tarafından kaldırılmadığı anlamına gelir.

Not : Karma haritaların ve zayıf karma haritaların tüm işlevleri benzerdir, ancak zayıf bir karma haritanın anahtarları zayıf referansa sahipken, bir karma haritanın anahtarları güçlü referanslıdır.

Diğer Haritalardan WeakHashMap Oluşturma

Diğer haritalardan nasıl zayıf bir hashmap oluşturabileceğimiz aşağıda açıklanmıştır.

 import java.util.HashMap; import java.util.WeakHashMap; class Main ( public static void main(String() args) ( // Creating a hashmap of even numbers HashMap evenNumbers = new HashMap(); String two = new String("Two"); Integer twoValue = 2; evenNumbers.put(two, twoValue); System.out.println("HashMap: " + evenNumbers); // Creating a weak hash map from other hashmap WeakHashMap numbers = new WeakHashMap(evenNumbers); System.out.println("WeakHashMap: " + numbers); ) ) 

Çıktı

 HashMap: (İki = 2) WeakHashMap: (İki = 2) 

WeakHashMap Yöntemleri

WeakHashMapSınıf bize harita üzerinde çeşitli işlemleri gerçekleştirmek için izin yöntemler sağlar.

WeakHashMap'e Eleman Ekle

  • put() - belirtilen anahtar / değer eşlemesini haritaya ekler
  • putAll() - belirtilen haritadaki tüm girişleri bu haritaya ekler
  • putIfAbsent() - haritada belirtilen anahtar yoksa, belirtilen anahtar / değer eşlemesini haritaya ekler

Örneğin,

 import java.util.WeakHashMap; class Main ( public static void main(String() args) ( // Creating WeakHashMap of even numbers WeakHashMap evenNumbers = new WeakHashMap(); String two = new String("Two"); Integer twoValue = 2; // Using put() evenNumbers.put(two, twoValue); String four = new String("Four"); Integer fourValue = 4; // Using putIfAbsent() evenNumbers.putIfAbsent(four, fourValue); System.out.println("WeakHashMap of even numbers: " + evenNumbers); //Creating WeakHashMap of numbers WeakHashMap numbers = new WeakHashMap(); String one = new String("One"); Integer oneValue = 1; numbers.put(one, oneValue); // Using putAll() numbers.putAll(evenNumbers); System.out.println("WeakHashMap of numbers: " + numbers); ) ) 

Çıktı

 Çift sayıların WeakHashMap'i: (Dört = 4, İki = 2) Sayıların WeakHashMap: (İki = 2, Dört = 4, Bir = 1) 

WeakHashMap Öğelerine Erişim

1. entrySet (), keySet () ve değerleri () kullanma

  • entrySet() - haritanın tüm anahtar / değer eşlemelerinin bir setini döndürür
  • keySet() - haritanın tüm tuşlarını döndürür
  • values() - haritanın tüm değerlerinin bir kümesini döndürür

Örneğin,

 import java.util.WeakHashMap; class Main ( public static void main(String() args) ( // Creating WeakHashMap of even numbers WeakHashMap numbers = new WeakHashMap(); String one = new String("One"); Integer oneValue = 1; numbers.put(one, oneValue); String two = new String("Two"); Integer twoValue = 2; numbers.put(two, twoValue); System.out.println("WeakHashMap: " + numbers); // Using entrySet() System.out.println("Key/Value mappings: " + numbers.entrySet()); // Using keySet() System.out.println("Keys: " + numbers.keySet()); // Using values() System.out.println("Values: " + numbers.values()); ) ) 

Çıktı

 WeakHashMap: (İki = 2, Bir = 1) Anahtar / Değer eşlemeleri: (İki = 2, Bir = 1) Anahtarlar: (İki, Bir) Değerler: (1, 2) 

2. get () ve getOrDefault () kullanma

  • get()- Belirtilen anahtarla ilişkili değeri döndürür. İade nullanahtar bulunmazsa.
  • getOrDefault()- Belirtilen anahtarla ilişkili değeri döndürür. Anahtar bulunmazsa, belirtilen varsayılan değeri döndürür.

Örneğin,

 import java.util.WeakHashMap; class Main ( public static void main(String() args) ( // Creating WeakHashMap of even numbers WeakHashMap numbers = new WeakHashMap(); String one = new String("One"); Integer oneValue = 1; numbers.put(one, oneValue); String two = new String("Two"); Integer twoValue = 2; numbers.put(two, twoValue); System.out.println("WeakHashMap: " + numbers); // Using get() int value1 = numbers.get("Two"); System.out.println("Using get(): " + value1); // Using getOrDefault() int value2 = numbers.getOrDefault("Four", 4); System.out.println("Using getOrDefault(): " + value2); ) ) 

Çıktı

 WeakHashMap: (İki = 2, Bir = 1) get (): 2 kullanarak getOrDefault (): 4 kullanarak 

WeakHashMap Öğelerini Kaldır

  • remove(key) - belirtilen anahtarla ilişkili girişi haritadan döndürür ve kaldırır
  • remove(key, value) - girişi haritadan yalnızca belirtilen anahtar belirtilen değere eşlenirse kaldırır ve bir boole değeri döndürür

Örneğin,

 import java.util.WeakHashMap; class Main ( public static void main(String() args) ( // Creating WeakHashMap of even numbers WeakHashMap numbers = new WeakHashMap(); String one = new String("One"); Integer oneValue = 1; numbers.put(one, oneValue); String two = new String("Two"); Integer twoValue = 2; numbers.put(two, twoValue); System.out.println("WeakHashMap: " + numbers); // Using remove() with single parameter int value = numbers.remove("Two"); System.out.println("Removed value: " + value); // Using remove() with 2 parameters boolean result = numbers.remove("One", 3); System.out.println("Is the entry (One=3) removed? " + result); System.out.println("Updated WeakHashMap: " + numbers); ) ) 

Çıktı

WeakHashMap: (İki = 2, Bir = 1) Kaldırılan değer: 2 Giriş (Bir = 3) kaldırıldı mı? Hatalı Güncellenmiş WeakHashMap: (Bir = 1)

Diğer WeakHashMap Yöntemleri

Yöntem Açıklama
clear() Haritadan tüm girişleri kaldırır
containsKey() Haritanın belirtilen anahtarı içerip içermediğini kontrol eder ve bir boole değeri döndürür
containsValue() Haritanın belirtilen değeri içerip içermediğini kontrol eder ve bir boole değeri döndürür
size() Haritanın boyutunu verir
isEmpty() Haritanın boş olup olmadığını kontrol eder ve bir boole değeri döndürür

Daha fazla bilgi edinmek için Java WeakHashMap'i (resmi Java belgeleri) ziyaret edin.

Ilginç makaleler...