📜  Java.util.IdentityHashMap类(1)

📅  最后修改于: 2023-12-03 15:01:35.538000             🧑  作者: Mango

Java.util.IdentityHashMap类介绍

java.util.IdentityHashMap 类实现了一个基于恒等(identity)比较而非基于相等(equality)比较的 Map 接口。

特点
  • IdentityHashMap 使用 == 操作符而非 equals() 方法来比较键(key)和值(value)。
  • 允许 null 键和 null 值。
  • HashMap 不同,IdentityHashMap 保证迭代器按键的插入顺序遍历。
构造方法
  • IdentityHashMap():创建一个空的 IdentityHashMap
  • IdentityHashMap(int expectedSize):创建一个具有指定初始容量的 IdentityHashMap
  • IdentityHashMap(Map<? extends K, ? extends V> m):创建一个包含指定 Map 中所有映射的 IdentityHashMap
例子
import java.util.IdentityHashMap;

public class IdentityHashMapExample {
    public static void main(String[] args) {
        IdentityHashMap<String, String> map = new IdentityHashMap<>();
        String a = "a";
        String b = new String("a");

        map.put(a, "value1"); // 添加 a 键,值为 value1
        map.put(b, "value2"); // 添加 b 键,值为 value2

        System.out.println(map.get(a)); // 输出 value1,a 是同一个对象,与上面添加的 a 键一致
        System.out.println(map.get(b)); // 输出 value2,b 是新创建的对象,与上面添加的 a 键不一致

        System.out.println(map.get("a")); // 输出 null,与 a 不是同一个字符串对象,因此查不到 a 键
    }
}
应用场景
  • 在需要基于恒等比较的场景下使用,比如类加载器和单例模式中。
  • 在需要保证迭代器按插入顺序遍历的场景下使用。
总结

IdentityHashMap 提供了一种基于恒等比较的键值对存储方式,允许 null 值和 null 键,并保证迭代器的顺序。但是,由于使用恒等比较而非相等比较,可能会导致不希望的结果。因此在使用该类时,要确保该特性与应用场景兼容。