hashmap默认长度扩充两次以后变为多少
2个回答
展开全部
hashMap用了一个名字为table的数组;还有若干个名字为entry的链表。看hashMap是如何应用这些数据结构的。用插 入<key,value>举例:hashMap首先会通过key得到其hashCode,具体的hash函数就不说了(因为没多大意义);然 后把key的hashCode%table.length,就是拿hashCode模table数组大小,得到的余数就是key所在table数组中的下 标(实际不是key的下标,是entry类);但这样做有个问题,可能不同key却有一样的hasdCode,所以求余后其必然会得到相同的下标,那如何 存储了?有两个办法,一种是利用开放地址法,就是说后来相同的hashCode去找先来hashCode所在下标的相邻下标。说的有点绕口,举个例子,比 如<1,2>已经存在table数组的31的位置上了,再来一个<101,102>,其通过哈希后说:我也应该在31的位置上, 但是table说,你后来,你再在31附近找个空位安置下吧。当然,具体怎么找,有规则的。另外一种方式就是链地址法,还是拿以上的例子 说,<101,102>来到时,发现31的位置已经被占了,这时table说:<1,2>,你带 下<101,102>;其实就是要<1,2>把<101,102>的引用存储了。但是<1,2>说:我 怎么存储<101,102>的引用了,我没位置呀。所以table说:我给你们每个壳(entry类)吧,把你们都封装了;于是就有了entry类。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询