Java HashMap工作原理及实现

    xiaoxiao2023-11-15  176

    1.参考 (1)Java HashMap工作原理及实现 https://yikun.github.io/2015/04/01/Java-HashMap工作原理及实现/ (2)如果两个对象不相同,他们的hashcode可能相同? https://myhadoop.iteye.com/blog/2059833

    2.摘抄笔记 注意: (1)什么时候会使用hashmap?他有什么特点? 是基于Map接口的实现,存储键值对时,他可以接收null的键和值,是非同步的,hashmap存储着Entry(hash,key,value,next)对象。 (2)你知道hashmap的工作原理吗? (a)使用hash的方式,通过put和get存储和获取对象。 (b)存储对象时,我们将键值对传递给put方法是,它调用hashCode 计算hash值,然后进一步得到存储的位置进行存储 (c)获取对象时,调用key的hashCode方法,计算hash从而得到位置, 进一步调用key的equals方法确定键值对。如果发生碰撞,会用链表将其组织。 (3)如果hashmap的大小超过了负载因子定义的容量,怎么办? 如果超过负载因子(默认0.75即3/4),会重新resize一个原来长度两倍的hashmap,并重新调用hash方法进行组织。 3. put函数的实现 put函数大致的思路为:

    对key的hashCode()做hash,然后再计算index;(key是唯一的hashcode可能存在两个对象相同)

    如果没碰撞直接放到bucket里; 如果碰撞了,以链表的形式存在buckets后; 如果碰撞导致链表过长(大于等于TREEIFY_THRESHOLD),就把链表转换成红黑树; 如果节点已经存在就替换old value(保证key的唯一性) 如果bucket满了(超过load factor*current capacity),就要resize。

    最新回复(0)