- 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)