Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> java

Java LemahHashMap

Java WeakHashMap

Dalam tutorial ini, kita akan belajar tentang Java WeakHashMap dan operasinya dengan bantuan contoh. Kita juga akan belajar tentang perbedaan antara WeakHashMap dan HashMap

WeakHashMap kelas kerangka koleksi Java menyediakan fitur struktur data tabel hash..

Ini mengimplementasikan antarmuka Peta.

Catatan :Kunci dari peta hash yang lemah adalah dari WeakReference ketik.

Objek dari tipe referensi lemah dapat menjadi sampah yang dikumpulkan di Java jika referensi tidak lagi digunakan dalam program.

Mari kita belajar membuat peta hash yang lemah terlebih dahulu. Kemudian, kita akan mempelajari perbedaannya dengan hashmap.


Buat WeakHashMap

Untuk membuat peta hash yang lemah, kita harus mengimpor java.util.WeakHashMap paket dulu. Setelah kita mengimpor paket, berikut adalah cara membuat peta hash yang lemah di Java.

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

Dalam kode di atas, kami telah membuat peta hash yang lemah bernama angka .

Di sini,

Perhatikan bagian new WeakHashMap<>(8, 0.6) . Di sini, parameter pertama adalah kapasitas dan parameter kedua adalah loadFactor .

Kapasitas default dan faktor beban

Dimungkinkan untuk membuat peta hash yang lemah tanpa menentukan kapasitas dan faktor bebannya. Misalnya,

// WeakHashMap with default capacity and load factor
WeakHashMap<Key, Value> numbers1 = new WeakHashMap<>();

Secara default,


Perbedaan Antara HashMap dan WeakHashMap

Mari kita lihat implementasi dari hashmap yang lemah di Java.

import java.util.WeakHashMap;

class Main {
    public static void main(String[] args) {
        // Creating WeakHashMap of numbers
        WeakHashMap<String, Integer> 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);
    }
}

Keluaran

WeakHashMap: {Four=4, Two=2}
WeakHashMap after garbage collection: {Four}

Seperti yang kita lihat, ketika kunci dua dari peta hash yang lemah disetel ke null dan melakukan pengumpulan sampah, kuncinya dihapus.

Itu karena tidak seperti peta hash, kunci peta hash yang lemah adalah referensi yang lemah Tipe. Ini berarti entri peta dihapus oleh pengumpul sampah jika kunci entri tersebut tidak lagi digunakan. Ini berguna untuk menghemat sumber daya.

Sekarang mari kita lihat implementasi yang sama di hashmap.

import java.util.HashMap;

class Main {
    public static void main(String[] args) {
        // Creating HashMap of even numbers
        HashMap<String, Integer> 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);
    }
}

Keluaran

HashMap: {Four=4, Two=2}
HashMap after garbage collection: {Four=4, Two=2}

Di sini, ketika kunci dua dari peta hash disetel ke null dan melakukan pengumpulan sampah, kuncinya tidak dihapus.

Ini karena tidak seperti peta hash yang lemah, kunci peta hash memiliki referensi yang kuat Tipe. Ini berarti entri peta tidak dihapus oleh pengumpul sampah meskipun kunci entri tersebut tidak lagi digunakan.

Catatan :Semua fungsi hashmaps dan hashmaps lemah serupa kecuali kunci dari hashmap lemah adalah referensi yang lemah, sedangkan kunci hashmap adalah referensi yang kuat.


Membuat WeakHashMap dari Peta Lain

Inilah cara kita membuat peta hash yang lemah dari peta lain.

import java.util.HashMap;
import java.util.WeakHashMap;

class Main {
    public static void main(String[] args) {
        // Creating a hashmap of even numbers
        HashMap<String, Integer> 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<String, Integer> numbers = new WeakHashMap<>(evenNumbers);

        System.out.println("WeakHashMap: " + numbers);
    }
}

Keluaran

HashMap: {Two=2}
WeakHashMap: {Two=2}

Metode WeakHashMap

WeakHashMap class menyediakan metode yang memungkinkan kita melakukan berbagai operasi pada peta.


Sisipkan Elemen ke WeakHashMap

Misalnya,

import java.util.WeakHashMap;

class Main {
    public static void main(String[] args) {
        // Creating WeakHashMap of even numbers
        WeakHashMap<String, Integer> 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<String, Integer> 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);
    }
}

Keluaran

WeakHashMap of even numbers: {Four=4, Two=2}
WeakHashMap of numbers: {Two=2, Four=4, One=1}

Mengakses Elemen WeakHashMap

1. Menggunakan entrySet(), keySet() dan values()

Misalnya,

import java.util.WeakHashMap;

class Main {
    public static void main(String[] args) {
        // Creating WeakHashMap of even numbers
        WeakHashMap<String, Integer> 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());
    }
}

Keluaran

WeakHashMap: {Two=2, One=1}
Key/Value mappings: [Two=2, One=1]
Keys: [Two, One]
Values: [1, 2]

2. Menggunakan get() dan getOrDefault()

Misalnya,

import java.util.WeakHashMap;

class Main {
    public static void main(String[] args) {
        // Creating WeakHashMap of even numbers
        WeakHashMap<String, Integer> 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);

    }
}

Keluaran

WeakHashMap: {Two=2, One=1}
Using get(): 2
Using getOrDefault(): 4

Hapus Elemen WeakHashMap

Misalnya,

import java.util.WeakHashMap;

class Main {
    public static void main(String[] args) {
        // Creating WeakHashMap of even numbers
        WeakHashMap<String, Integer> 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);
    }
}

Keluaran

WeakHashMap: {Two=2, One=1}
Removed value: 2
Is the entry {One=3} removed? False
Updated WeakHashMap: {One=1}

Metode WeakHashMap Lainnya

Metode Deskripsi
clear() Menghapus semua entri dari peta
containsKey() Memeriksa apakah peta berisi kunci yang ditentukan dan mengembalikan nilai boolean
containsValue() Memeriksa apakah peta berisi nilai yang ditentukan dan mengembalikan nilai boolean
size() Mengembalikan ukuran peta
isEmpty() Memeriksa apakah peta kosong dan mengembalikan nilai boolean

Untuk mempelajari lebih lanjut, kunjungi Java WeakHashMap (dokumentasi resmi Java).


java

  1. Operator Jawa
  2. Komentar Jawa
  3. Java untuk setiap Loop
  4. String Jawa
  5. Antarmuka Jawa
  6. Kelas Anonim Java
  7. Java mencoba-dengan-sumber daya
  8. Anotasi Jawa
  9. Pernyataan Jawa
  10. Vektor Jawa