HashMap的底层数据结构是怎样的?
回答思路
- 基本结构;
- 散列原理;
- 哈希冲突处理和Java8的改进;
- 扩容机制;
- 总结。
1. HashMap的底层结构
核心部分组成:
- 数组:HashMap的主体,用于存储数据。数组的每个槽位可以存放一个链表(或红黑树)的头节点。
- 链表:当多个元素的哈希值冲突时(即它们计算出的数组索引位置相同),这些元素会以链表的形式存储在同一个槽位。
- 红黑树(Java 8引入):当某个槽位的链表长度超过阈值(默认是8)时,链表会转换为红黑树,以提高搜索效率。
2. 散列原理
当向HashMap中添加一个键值对时,HashMap会使用键的hashCode()方法计算一个哈希码,然后通过特定的散列函数将这个哈希码转换成数组索引。这个索引决定了键值对在数组中的存储位置。
3. 哈希冲突处理
- 链地址法:HashMap通过链表解决哈希冲