JDK中IdentityHashMap使用详解

IdentityHashMap,使用什么的跟HashMap相同,主要不同点在于:

  1. 数据结构:使用一个数组table来存储 key:value,table[2k] 为keytable[2k + 1] 为value,也即:
    key:value ==> table[2k]:table[2k + 1](HashMap使用数组 + 链表);
  2. IdentityHashMap 中的 key 和 value 通过==来比较是否相等(HashMap通过equals());
  3. IdentityHashMap 中的 hash冲突解决方式为线性探测法(HashMap拉链法);

具体,我们来看关键源码:

/**
 * 数据存储结构:
 * 使用一个数组table来存储 key - value,第 table[2k] 为key, table[2k + 1] 为value,也即:
 * key:value ==> table[2k]:table[2k + 1]
 * IdentityHashMap 中的 key 和 value 通过 "==" 来比较是否相等(HashMap通过equals()来比较是否相等)
 * @since 1.4
 */
public class IdentityHashMap<K, V> extends AbstractMap<K, V> implements Map<K, V>, java.io.Serializable, Cloneable {

    private static final int DEFAULT_CAPACITY = 32;
    private static final int MINIMUM_CAPACITY = 4;
    private static final int MAXIMUM_CAPACITY = 1 << 29;
    private transient Object[] table;// 存储键值对的数组
    private int size;
    private transient int modCount;
    private transient int threshold;
    private static final Object NULL_KEY = new Object();

    // 如果key为null,使用NULL_KEY代替
    private static Object maskNull(Object key) {
        return (key == null ? NULL_KEY : key);
    }

    // 如果之前key为null,被替换为NULL_KEY,现在替换回来
    private static Object u
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值