• Java8 之前 (数组+链表的形式)

  • HashMap原理---------个人笔记

     

  1. 哈希表的默认大小为16
  2. 原理:先调用Hashcode()方法,通过哈希算法生成一个索引的数组,此数组的值为hash的索引。然后根据索引值找到对应的索引,判断里面是否有对象。没有对象则直接填入。有对象则调用equal()方法,判断里面的value是否相同。相同则覆盖掉,不相同则已链表的形式存入(链表形式为先进入的在后,后进入的在前。Java8以后为先进的在前,后进的在后
  3. hash的加载因子为0.75. 当元素到达现有的哈希表的75%的时候,则对哈希表进行扩容,扩容后重新对所有的对象进行计算,重新拍位置,当找到新的位置时,将元素放入进去
  • Java8 之后(数组+链表+红黑树)

  1. 红黑树为二叉树的一种,除了添加以外,所有的操作都比链表快
  2. 当一个索引里面的对象链表长度大于8且hash容量大于64(hash索引大于64)时,会将索引里的链表变为红黑树
  3. 扩容后不需要重新通过哈希算法计算位置,直接将原来hash表的总长度加上当前的位置(索引),最后的结果就是扩容后的位置(例,原来hash数组总长度是5,在3的位置,扩容后就在新的hash数组的8的位置)

 

 

 

 

 

 

 

相关文章:

  • 2021-10-19
  • 2021-08-10
  • 2021-06-30
  • 2021-07-11
  • 2021-08-23
  • 2021-08-05
  • 2022-01-14
猜你喜欢
  • 2021-09-20
  • 2022-12-23
  • 2021-11-21
  • 2021-07-03
  • 2021-04-24
  • 2021-11-12
相关资源
相似解决方案