简介
说明
本文用示例来介绍Java中IdentityHashMap的用法。
IdentityHashMap介绍
正常的Map 实现(如 HashMap)中,当且仅当满足下列条件时才认为两个键 k1 和 k2 相等:(k1==null ? k2==null : e1.equals(e2))。
IdentityHashMap的实现方式:
- 判断两个键值k1和 k2相等的条件是 k1 == k2 。
- 利用哈希表实现 Map 接口,比较键(和值)时使用引用相等性代替对象相等性。该类不是 通用 Map 实现。此类实现 Map 接口时,它有意违反 Map 的常规协定,该协定在比较对象时强制使用 equals 方法。此类设计仅用于其中需要引用相等性语义的罕见情况。
实例
package org.example.a; import java.util.IdentityHashMap; public class Demo { public static void main(String[] args) { IdentityHashMap<String, Integer> map = new IdentityHashMap<>(); String s1 = new String("ab"); String s2 = new String("ab"); map.put(s1, 1); map.put(s2, 2); System.out.println(map.get("ab")); map.put("cd", 3); System.out.println(map.get("cd")); System.out.println(map); } }
结果
null 3 {ab=2, ab=1, cd=3}
分析
- 为什么ab是key,但是通过它取出value却是null?
- ab所在的String对象引用是key。当我们去取的时候,是用了一个字符串字面量去取的,它指向常量池,与String的对象引用是不同的,所以,取出为null。
- 详见:Java之String-intern方法的作用及原理 – 自学精灵
请先
!