HashMap的总结

HashMap与HashTable的区别

  1. 相同点
    1. 二者存储结构
    2. 二者实现原理
  2. 不同点
    1. HashTable相对于HashMap是线程安全的
    2. 不允许 keyvaluenull
    3. HashTable是一个过时的集合类,目前不建议使用,当需要线程安全时,可以使用CurrentHashMap

HashMap的总结

  1. JDK1.8 HashMap的底层是 数组 + 链表 + 红黑树
  2. 装在因子
    1. 何时扩容:装载因子*初始容量小于散列表的元素时,进行扩容
    2. 扩容为原来的2倍
    3. 装载因子默认值是 0.75
      1. 初始化指定的装载因子,无论大小都会对HashMap性能产生不好的影响
      2. 装载因子大了
        1. 可以减小再散列的次数,但是会增加hash碰撞的概率,也会耗费性能:操作链表 + 红黑树
      3. 装载因子小了
        1. 可以减少hash碰撞的概率,但是会增加扩容(再散列)的次数
  3. 初始化容量
    1. 默认 16 必须为2的幂次
    2. 初始化容量大了
      1. 遍历的速度会减慢
    3. 初始化容量小了
      1. 扩容次数(再散列)会变多
  4. 对随机性的处理
    1. 并不是直接拿key的hashCode来用,而是让其与自己的高16位做异或运算,增加了元素放入Hash表的随机性
  5. 桶转为红黑树时的注意事项
    1. 并不是桶上满8个元素直接转->红黑树,还要满足散列表容量大于64才行
原文地址:https://www.cnblogs.com/JQ04/p/15093093.html