“Java HashMap”的版本间的差异
跳到导航
跳到搜索
Jihongchang(讨论 | 贡献) |
Jihongchang(讨论 | 贡献) |
||
第4行: | 第4行: | ||
HashMap 采用 Entry 数组来存储 key-value 对,每一个键值对组成了一个 Entry 实体,Entry 类实际上是一个单向的链表结构,它具有 next 指针,可以连接下一个 Entry 实体,以此来解决 Hash 冲突的问题,因为 HashMap 是按照 key 的 hash 值来计算 Entry 在 HashMap 中存储的位置的,如果 hash 值相同,而 key 内容不相等,那么就用链表来解决这种 hash 冲突 | HashMap 采用 Entry 数组来存储 key-value 对,每一个键值对组成了一个 Entry 实体,Entry 类实际上是一个单向的链表结构,它具有 next 指针,可以连接下一个 Entry 实体,以此来解决 Hash 冲突的问题,因为 HashMap 是按照 key 的 hash 值来计算 Entry 在 HashMap 中存储的位置的,如果 hash 值相同,而 key 内容不相等,那么就用链表来解决这种 hash 冲突 | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
=== Java 8 提供的 HashMap === | === Java 8 提供的 HashMap === | ||
+ | Java 8 的 HashMap 数据结构发生了较大的变化,之前的 HashMap 使用数组+链表实现,新的 HashMap 里,虽然依然使用 table 数组,但是数据类型发生了变换: | ||
+ | |||
+ | Java 8 里的 HashMap 使用的是数组+链表+红黑树实现 |
2023年3月1日 (三) 06:13的版本
Java 8 之前的 HashMap
在 Java 7 及之前的版本中,HashMap 的底层实现是数组和链表:
HashMap 采用 Entry 数组来存储 key-value 对,每一个键值对组成了一个 Entry 实体,Entry 类实际上是一个单向的链表结构,它具有 next 指针,可以连接下一个 Entry 实体,以此来解决 Hash 冲突的问题,因为 HashMap 是按照 key 的 hash 值来计算 Entry 在 HashMap 中存储的位置的,如果 hash 值相同,而 key 内容不相等,那么就用链表来解决这种 hash 冲突
Java 8 提供的 HashMap
Java 8 的 HashMap 数据结构发生了较大的变化,之前的 HashMap 使用数组+链表实现,新的 HashMap 里,虽然依然使用 table 数组,但是数据类型发生了变换:
Java 8 里的 HashMap 使用的是数组+链表+红黑树实现