一。

HashMap类中的Node<K,V>类里有一个Node<K,V> next。那以Node<K,V>.next.next.next这种结构形式存储元素就是所说的链表,而Node<K,V>[ ] tab就是数组,tab所存储元素为每个链表的第一个元素。

每个数组的位置就是一个哈希值,如果两个值哈希值一样,就会占用一个位置,他们就成了一个链表

Java8优化了这个地方,如果相同哈希值,链表的长度超过8,就从链表转换成红黑树

Node类是HashMap的一个静态内部类,实现了 Map.Entry<K,V>接口。在调用put方法创建一个新的键值对时,会调用newNode方法来创建Node对象

二、数据结构
  HashMap内部结构是数组(Node[] table)和链表结合组成的复合结构,数组被分成一个个桶(bucket),通过哈希值决定键值对在这个数组的寻址;哈希值相同的键值对,则以链表形式存储。需注意的是:链表大小超过阈值(TREEIFY_THRESHOLD = 8)时,链表就会被改造成树形结构。 下面示意图为一个简单的HashMap示意图:


HashMap里的Node

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-12-22
  • 2021-10-03
  • 2022-12-23
  • 2021-11-22
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-11-27
  • 2021-06-19
  • 2022-12-23
  • 2021-08-11
  • 2021-06-12
  • 2021-09-21
  • 2021-07-24
相关资源
相似解决方案