A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

关于一道百度的面试题关于HashMap的内部实现机制,望各位大侠们指点指点,小弟不胜感激

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

2 个回复

倒序浏览


1.    HashMap概述:
   HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。


2.    HashMap的数据结构:
   java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个链表散列的数据结构,即数组和链表的结合体。

file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-15788.png
从上图中可以看出,HashMap底层就是一个数组结构,数组中的每一项又是一个链表。当新建一个HashMap的时候,就会初始化一个数组。

源码如下:
view source
file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-11086.png
print?
01

/**
02
* The table, resized as necessary. Length MUST Always be a power of two.

03
*/
04
transient Entry[] table;

05

06
static class Entry<K,V> implements Map.Entry<K,V> {

07
    final K key;
08
    V value;

09
    Entry<K,V> next;
10
    final int hash;

11
    ……
12
}
可以看出,Entry就是数组中的元素,每个 Map.Entry 其实就是一个key-value对,它持有一个指向下一个元素的引用,这就构成了链表。


[size=10.5000pt]
[size=10.5000pt]

评分

参与人数 1技术分 +1 收起 理由
admin + 1 我看晕了

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马