首页 > 试题广场 >

关于HashMap的实现机制,下面哪些描述是正确的()

[单选题]

关于HashMap的实现机制,下面哪些描述是正确的()

  • HashMap中key-value 当成一个整体进行处理,系统总是根据 数组的坐标来获得 key-value 的存储位置。
  • HashMap基于哈希表的 Map 接口的实现,允许使用 null 值和 null 键。
  • 如果HashMap中,如果Key的hash相同的话,HashMap将会出错。
  • HashMap每次容量的扩增都是以2的倍数来增加。
正确答案:B。hashMap是根据key的hash码来存储key-value的,存储在 bucket数组 中( HashMap是在bucket中储存键对象和值对象,作为Map.Entry ),获取对象也是通过Key的hashcode获取(A描述错误)如果key的hashcode相同,会覆盖,不会出错(C不对),hashmap默认的负载因子是0.75,即达到容量的75%以后 将会创建原来HashMap大小的两倍的bucket数组,并在原来的对象放到新的bucket数组中(这个过程叫做rehashing)D描述也不正确。
发表于 2017-02-20 13:14:11 回复(0)
A为什么错?HashMap的底层是hash表,hash由数组和链表组成。当调用set()方法向HashMap中添加元素的时候,首先会调用key的hashCode()方法计算哈希值,然后根据哈希算法映射到对应的数组下标。算法公式为index = hashCode(key)&(length-1),这时候会将键-值对(即Entry)存入数组对应的角标位置,作为链表的头结点,即数组中存放的是链表的头结点。但是如果计算出来的hashCode(key)冲突,那么相冲突的哈希值会得到相同的index,这时候会进一步调用key的equals()来计算key到底是不是同一个,如果是同一个,那么会直接将key对应的旧值替换掉。如果key不是同一个,那么会将这个新结点以前插法的方式链接到index中存放的链表中。这就是链地址法解决哈希值冲突。
A之所以错,是因为如果有哈希冲突的情况,数组坐标里存放的就不是一个结点,而是一个链表,仅仅通过一次数组坐标是找不到的,还要遍历链表,才能最终确定目标的位置。
发表于 2018-09-01 21:15:14 回复(0)
这道题是2016年北京航天信息的笔试题。大家不容小觑。
1.  HashMap  是无序的,所以无下标的说法   A错误
2. B正确  但是干扰性很强    键对象不允许重复,但是可以为null,即只能有一个key值为null的映射;而value可以重复,也可以为null。
3.    不会出错,而是 新的值替代了旧的值     C错 
4. hashmap  的容量一定是 2 的倍数, 但是不是以 2 的倍数类递增   D错

这道题还是很难的  不明白难度为啥只有一颗星  牛客网都是大神??  呜呜呜呜呜~~~~
发表于 2017-07-06 16:16:54 回复(0)
B
发表于 2017-02-20 11:41:24 回复(0)