8.6.7 IdentityMap实现类
8.6.7 IdentityMap实现类
两个key是同一个对象的引用时IdentityMap才认为这两个key相等
IdentityMap这个Map实现类的实现机制与HashMap基本相似,不过,IdentityMap在处理两个key相等时比较独特:
- 在
IdentityHashMap中,当且仅当两个key严格相等时,IdentityHashMap才认为两个key相等;- 所谓严格相等即:
key1==key2。也就是说,只有key1和key2是同一个对象的引用,IdentityHashMap才认为两个key相等.
- 所谓严格相等即:
普通的HashMap通过equals和hashCode来判断相等
对于普通的HashMap而言,只要key1和key2通过equals()方法比较返回true,且它们的hashCode值相等即可。
IdentityHashMap违反了Map的通常规范
IdentityHashMap是一个特殊的Map实现!此类实现Map接口时,它有意违反了Map的通常规范: IdentityHashMap要求两个key严格相等时才认为两个key相等。
IdentityHashMap的key和value可以为null
IdentityHashMap提供了与HashMap基本相似的方法,也允许使用null作为key和value。
IdentityHashMap无序
与HashMap相似: IdentityHashMap也不保证key-value对之间的顺序,更不能保证它们的顺序随时间的推移保持不变。
程序 IdentityHashMap示例
1 | import java.util.*; |
编译、运行上面程序,看到如下运行结果:
1 | {语文=89, java=98, 语文=78} |
上面程序试图向IdentityHashMap对象中添加4个key-value对,
- 前2个
key-value对中的key是新创建的字符串对象,它们通过==运算符比较不相等,所以IdentityHashMap会把它们当成2个key来处理; - 后2个
key-value对中的key都是字符串直接量,而且它们的字符序列完全相同,Java使用常量池来管理字符串直接量,所以它们通过一比较返回true,IdentityHashMap会认为它们是同一个key,因此只有第一次可以添加成功。