hashmap面试试题及答案.docxVIP

  • 0
  • 0
  • 约7.13千字
  • 约 13页
  • 2026-02-09 发布于江西
  • 举报

第PAGE页共NUMPAGES页

HashMap面试试题及答案

一、选择题(每题2分,共16分)

1.下列关于HashMap的描述,正确的是()。

A.HashMap底层采用数组+链表结构,1.8版本引入了红黑树优化

B.HashMap的初始容量为10,负载因子默认为0.75

C.HashMap的键和值都可以为null,且允许多个null键

D.HashMap的扩容阈值等于容量×负载因子,扩容时容量变为原来的2倍

2.在HashMap中,当两个对象的hashCode()相等时,会触发()。

A.直接覆盖旧值

B.存储在同一个链表中

C.存储在同一个红黑树中

D.抛出ConcurrentModificationException

3.HashMap在1.8版本中,链表长度超过多少时会转换为红黑树?()

A.6

B.7

C.8

D.9

4.下列关于HashMap扩容机制的描述,错误的是()。

A.扩容时新数组的容量为旧数组的2倍

B.扩容时需要重新计算所有键的哈希值,并重新分配位置

C.扩容时链表中的节点会按原顺序迁移到新数组中

D.扩容时如果节点数量小于等于6,红黑树会退化为链表

5.在HashMap中,调用put(key,value)方法时,如果key已存在,会执行()。

A.直接添加新value,不覆盖旧值

B.用新value覆盖旧value,并返回旧value

C.抛出IllegalArgumentException

D.将key和value组成链表节点添加到链表尾部

6.下列关于HashMap的Key设计的说法,正确的是()。

A.Key必须实现Comparable接口

B.重写equals()方法时可以不重写hashCode()方法

C.Key的hashCode()方法应尽量返回不同的值,减少哈希冲突

D.Key可以是任意类型,包括基本数据类型

7.HashMap的迭代器(Iterator)在遍历过程中,如果调用iterator.remove()方法,会()。

A.抛出ConcurrentModificationException

B.正常删除当前元素,不影响后续遍历

C.导致遍历结果错乱

D.删除HashMap中的所有元素

8.下列关于HashMap和Hashtable的说法,错误的是()。

A.Hashtable是线程安全的,HashMap是线程不安全的

B.Hashtable不允许key或value为null,HashMap允许key和value为null

C.Hashtable的扩容容量为旧容量×2+1,HashMap的扩容容量为旧容量×2

D.Hashtable的继承体系是Dictionary,HashMap的继承体系是AbstractMap

二、填空题(每空2分,共16分)

1.HashMap的底层数组被称为________,其每个元素被称为________(或桶)。

2.HashMap的默认初始容量是________,默认负载因子是________。

3.当HashMap中元素数量超过________×________时,会触发扩容。

4.在1.8版本中,当链表长度超过________且数组长度超过________时,链表会转换为红黑树。

5.HashMap的put()方法中,计算哈希值时会调用key的________方法,并结合数组长度进行________运算确定存储位置。

6.如果两个key的equals()返回true,则它们的hashCode()必须返回________。

三、简答题(每题8分,共32分)

1.简述HashMap的put(key,value)方法的完整执行流程。

2.为什么HashMap的容量必须是2的幂次方?如果不是,会有什么影响?

3.HashMap在1.8版本中对链表转红黑树的原因是什么?转红黑树的阈值为什么是8,退化的阈值为什么是6?

4.在多线程环境下使用HashMap可能会出现什么问题?如何解决?

四、代码题(共20分)

```java

importjava.util.HashMap;

importjava.util.Map;

publicclassHashMapTest{

publicstaticvoid

文档评论(0)

1亿VIP精品文档

相关文档