From 2144acd0907a4c4086d9085ea0aa54d8af9194a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9D=B3=E9=98=B3?= <260893248@qq.com> Date: Thu, 21 Feb 2019 18:54:38 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=80=E5=A4=84=E6=8B=BC?= =?UTF-8?q?=E5=86=99=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修改一处拼写错误 --- java/basis/hashmap.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/basis/hashmap.md b/java/basis/hashmap.md index a3ad434d..6946ba78 100644 --- a/java/basis/hashmap.md +++ b/java/basis/hashmap.md @@ -326,7 +326,7 @@ final Node[] 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\(\)方法去链表或树中去查找对应的节点