所有分类
  • 所有分类
  • 未分类

Java之HashMap-IdentityHashMap的用法

简介

说明

本文用示例来介绍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。
    2. 详见:Java之String-intern方法的作用及原理 – 自学精灵

0

评论0

请先

显示验证码
没有账号?注册  忘记密码?

社交账号快速登录