Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion java/basis/hashmap.md
Original file line number Diff line number Diff line change
Expand Up @@ -326,7 +326,7 @@ final Node<K,V>[] resize() {
是基于Map接口的实现,存储键值对时,它可以接收null的键值,是非同步的,HashMap存储着Entry\(hash, key, value, next\)对象。

**2. 你知道HashMap的工作原理吗?**
通过hash的方法,通过put和get存储和获取对象。存储对象时,我们将K/V传给put方法时,它调用hashCode计算hash从而得到bucket位置,进一步存储,HashMap会根据当前bucket的占用情况自动调整容量\(超过`Load Facotr`则resize为原来的2倍\)。获取对象时,我们将K传给get,它调用hashCode计算hash从而得到bucket位置,并进一步调用equals\(\)方法确定键值对。如果发生碰撞的时候,Hashmap通过链表将产生碰撞冲突的元素组织起来,在Java 8中,如果一个bucket中碰撞冲突的元素超过某个限制\(默认是8\),则使用红黑树来替换链表,从而提高速度。
通过hash的方法,通过put和get存储和获取对象。存储对象时,我们将K/V传给put方法时,它调用hashCode计算hash从而得到bucket位置,进一步存储,HashMap会根据当前bucket的占用情况自动调整容量\(超过`Load Factor`则resize为原来的2倍\)。获取对象时,我们将K传给get,它调用hashCode计算hash从而得到bucket位置,并进一步调用equals\(\)方法确定键值对。如果发生碰撞的时候,Hashmap通过链表将产生碰撞冲突的元素组织起来,在Java 8中,如果一个bucket中碰撞冲突的元素超过某个限制\(默认是8\),则使用红黑树来替换链表,从而提高速度。

**3. 你知道get和put的原理吗?equals\(\)和hashCode\(\)的都有什么作用?**
通过对key的hashCode\(\)进行hashing,并计算下标\( `(n-1) & hash`\),从而获得buckets的位置。如果产生碰撞,则利用key.equals\(\)方法去链表或树中去查找对应的节点
Expand Down