Java--IdentityHashMap--使用/实例

杨沐涵

关注

阅读 58

2022-02-15


简介

说明

        本文用示例来介绍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}

分析

  1. 为什么ab是key,但是通过它取出value却是null?

  1. ab所在的String对象引用是key。当我们去取的时候,是用了一个字符串字面量去取的,它指向常量池,与String的对象引用是不同的,所以,取出为null。


精彩评论(0)

0 0 举报