安卓学习笔记 6-8 hashmap底层实现

hashmap分析

=============hashmap简介===================

我们可以往hashmap中添加键值对,也可以通过key来获取value

当插入数据时,会先判断是否有足够的容量

如果不够,就扩容为到原来容量的两倍

够的话就先判断key是否为空,如果为空就插入到那个空的键值对

不为空就按照键值对直接插入


==========put方法分析===============

public V put(K key, V value) {
    if (table == EMPTY_TABLE) {
        inflateTable(threshold);
    }
    if (key == null)
        return putForNullKey(value);
    int hash = sun.misc.Hashing.singleWordWangJenkinsHash(key);
    int i = indexFor(hash, table.length);
    for (HashMapEntry<K,V> e = table[i]; e != null; e = e.next) {
        Object k;
        if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
            V oldValue = e.value;
            e.value = value;
            e.recordAccess(this);
            return oldValue;
        }
    }

    modCount++;
    addEntry(hash, key, value, i);
    return null;
}


先解析了一个hashmap,然后检测key是否为空,为空就往key为空的那个键值对中插入值

然后通过hash值和整个数组的长度获得数组总长度(不太明白为什么这么做)

不为空就判断key的hash值与参数中传递的key的hash值是否相同,以及key是否与参数中传递的相同

然后就往指定key里面放对应的值

==========获取hashmap中某个key对应的value==========

)

这个方法首先会判断key是否为空,为空就直接从key为空的那个键值对中获取值

不为空就通过与运算和指定key的hash值来获得下标,然后通过下标获得值




第一篇博客就这样结束吧,明天继续加油!!!



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值