Bu eğitimde, örnekler yardımıyla Java WeakHashMap ve işlemlerini öğreneceğiz. WeakHashMap ve HashMap arasındaki farkları da öğreneceğiz.
WeakHashMap
Java 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.WeakHashMap
paketi 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 null
ve çö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 null
ve çö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
WeakHashMap
Sı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 eklerputAll()
- belirtilen haritadaki tüm girişleri bu haritaya eklerputIfAbsent()
- 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ürkeySet()
- haritanın tüm tuşlarını döndürürvalues()
- 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. İadenull
anahtar 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ırremove(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.