亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

Java 弱哈希映射

Java 弱哈希映射

在本教程中,我们将借助示例了解 Java WeakHashMap 及其操作。我们还将了解 WeakHashMap 和 HashMap 的区别

WeakHashMap Java集合框架的类提供了哈希表数据结构的特性..

它实现了 Map 接口。

注意 :弱 hashmap 的键是 WeakReference 输入。

如果程序中不再使用弱引用类型的对象,Java 中可以对弱引用类型的对象进行垃圾回收。

让我们先学习创建一个弱哈希映射。然后,我们将了解它与 hashmap 的区别。


创建一个 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 的弱 hashmap .

在这里,

注意部分 new WeakHashMap<>(8, 0.6) .这里,第一个参数是容量 第二个参数是 loadFactor .

默认容量和负载率

可以在不定义其容量和负载因子的情况下创建弱哈希图。例如,

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

默认情况下,


HashMap和WeakHashMap的区别

让我们看看Java中弱hashmap的实现。

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 弱 hashmap 的值设置为 null 并执行垃圾回收,密钥被删除。

这是因为与 hashmap 不同,weak hashmap 的键是 weak reference 类型。这意味着如果不再使用该条目的键,则垃圾收集器将删除该映射的条目。这对于节省资源很有用。

现在让我们在 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);
    }
}

输出

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

这里,当键 two hashmap 的值设置为 null 并执行垃圾回收,密钥不会被删除。

这是因为与弱哈希映射不同,哈希映射的键具有强引用 类型。这意味着垃圾收集器不会删除映射的条目,即使该条目的键不再使用。

注意 :hashmaps和weak hashmaps的所有功能都是相似的,除了weak hashmap的key是弱引用的,而hashmap的keys是强引用的。


从其他地图创建 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 break 语句
  6. Java 字符串
  7. Java 接口
  8. Java 匿名类
  9. Java try-with-resources
  10. Java 注释
  11. Java 断言
  12. Java 向量