zoukankan      html  css  js  c++  java
  • 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才行
  • 相关阅读:
    94. Binary Tree Inorder Traversal
    101. Symmetric Tree
    38. Count and Say
    28. Implement strStr()
    实训团队心得(1)
    探索性测试入门
    LC.278. First Bad Version
    Search in Unknown Sized Sorted Array
    LC.88. Merge Sorted Array
    LC.283.Move Zeroes
  • 原文地址:https://www.cnblogs.com/JQ04/p/15093093.html
Copyright © 2011-2022 走看看