IdentityHashMap:基于引用相等的 Map 实现
java.util.IdentityHashMap 自 JDK 1.4 起存在,表面上实现了 Map 接口,但官方文档明确说它不是通用 Map 实现——判等方式和内部存储结构都和 HashMap 不同,只应该用在明确需要"引用相等"语义的少数场景。 与 HashMap 的核心区别:引用相等而非逻辑相等 HashMap 判断两个 key 是否相同,用的是 equals();IdentityHashMap 用的是 ==,也就是判断是否是同一个对象引用。计算哈希值时也不调用 key 自身的 hashCode(),而是统一用 System.identityHashCode(key)。 Map<String, Integer> hashMap = new HashMap<>(); Map<String, Integer> identityMap = new IdentityHashMap<>(); String a = new String("key"); String b = new String("key"); hashMap.put(a, 1); hashMap.put(b, 2); System.out.println(hashMap.size()); // 1,a.equals(b) 为 true,视为同一个 key identityMap.put(a, 1); identityMap.put(b, 2); System.out.println(identityMap.size()); // 2,a != b,视为两个不同的 key 这个差异不仅体现在 key 上,entrySet()、keySet()、values() 这些视图集合里元素的比较,同样是引用相等语义,而不是 HashMap 视图那种基于 equals() 的语义。 ...