工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Java

Java WeakHashMap

Java WeakHashMap

このチュートリアルでは、例を使用して Java WeakHashMap とその操作について学習します。 WeakHashMap と HashMap の違いについても学びます

WeakHashMap Java コレクション フレームワークのクラスは、ハッシュ テーブル データ構造の機能を提供します..

Map インターフェースを実装します。

注意 :弱いハッシュマップのキーは WeakReference のものです タイプしてください。

弱い参照型のオブジェクトは、参照がプログラムで使用されなくなった場合、Java でガベージ コレクションできます。

最初に弱いハッシュ マップを作成する方法を学びましょう。次に、ハッシュマップとの違いを学びます。


WeakHashMap を作成する

弱いハッシュマップを作成するには、java.util.WeakHashMap をインポートする必要があります 最初にパッケージ。パッケージをインポートしたら、Java で弱いハッシュマップを作成する方法を次に示します。

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

上記のコードでは、numbers という名前の弱いハッシュマップを作成しました。 .

ここで、

new WeakHashMap<>(8, 0.6) の部分に注意してください .ここで、最初のパラメータは容量です 2 番目のパラメータは loadFactor です .

デフォルトの容量と負荷率

容量と負荷係数を定義せずに弱いハッシュマップを作成することは可能です。たとえば、

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

デフォルトでは、


HashMap と WeakHashMap の違い

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);
    }
}

出力

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

ご覧のとおり、キー two の場合 弱いハッシュマップの null に設定されています ガベージ コレクションを実行すると、キーが削除されます。

ハッシュマップとは異なり、弱いハッシュマップのキーは弱い参照であるためです。 タイプ。これは、そのエントリへのキーが使用されなくなった場合、マップのエントリがガベージ コレクターによって削除されることを意味します。これはリソースを節約するのに役立ちます。

ハッシュマップで同じ実装を見てみましょう。

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);
    }
}

出力

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

ここで、キー two の場合 ハッシュマップの null に設定されています ガベージ コレクションを実行しても、キーは削除されません。

これは、弱いハッシュマップとは異なり、ハッシュマップのキーが強力な参照であるためです。 タイプ。これは、エントリのキーが使用されなくなっても、マップのエントリがガベージ コレクターによって削除されないことを意味します。

注意 :ハッシュマップと弱いハッシュマップのすべての機能は似ていますが、弱いハッシュマップのキーは弱い参照であり、ハッシュマップのキーは強い参照です.


他のマップからの WeakHashMap の作成

他のマップから弱いハッシュマップを作成する方法は次のとおりです。

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);
    }
}

出力

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

WeakHashMap のメソッド

WeakHashMap クラスは、マップ上でさまざまな操作を実行できるようにするメソッドを提供します。


要素を WeakHashMap に挿入

たとえば、

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);
    }
}

出力

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

WeakHashMap 要素へのアクセス

<強い>1. entrySet()、keySet()、values() の使用

たとえば、

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());
    }
}

出力

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

<強い>2. get() と getOrDefault() の使用

たとえば、

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);

    }
}

出力

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

WeakHashMap 要素を削除

たとえば、

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);
    }
}

出力

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

WeakHashMap のその他の方法

メソッド 説明
clear() マップからすべてのエントリを削除します
containsKey() 指定されたキーがマップに含まれているかどうかを確認し、ブール値を返します
containsValue() マップに指定された値が含まれているかどうかを確認し、ブール値を返します
size() マップのサイズを返します
isEmpty() マップが空かどうかを確認し、ブール値を返します

詳細については、Java WeakHashMap (Java の公式ドキュメント) を参照してください。


Java

  1. Java オペレーター
  2. Java コメント
  3. Java if...else ステートメント
  4. Java for-each ループ
  5. Java 文字列
  6. Java インターフェイス
  7. Java匿名クラス
  8. Java try-with-resources
  9. Java アノテーション
  10. Java アサーション
  11. Java ベクトル