📅  最后修改于: 2023-12-03 15:01:35.538000             🧑  作者: Mango
java.util.IdentityHashMap
类实现了一个基于恒等(identity)比较而非基于相等(equality)比较的 Map 接口。
IdentityHashMap
使用 ==
操作符而非 equals()
方法来比较键(key)和值(value)。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 键,并保证迭代器的顺序。但是,由于使用恒等比较而非相等比较,可能会导致不希望的结果。因此在使用该类时,要确保该特性与应用场景兼容。