抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >
  1. HashMap
  • Hash 算法及寻址优化:把 key 的 hashcode 转换为二进制(32位),将 hashcode 右移 16 位后和原 hashcode 做异或(实际上就是把搞16位挪到低16位,和原低16位异或,目的是让高低16位都参与 hash 计算),然后把结果和size-1做与运算(这其实和对 hash 做size取模效果是一样的,但与运算的性能高于取模运算)。
    总结:hash优化,就是让高低16位参与运算,尽量避免hash冲突;寻址优化,就是用与代替取模。
  • 解决hash冲突:用链表+红黑树,但链表长度大于8转为红黑树。
  • HashMap 扩容:当发生扩容,可能需要对原有元素进行rehash,若扩容后的size二进制未多出一个bit,则hash不变,否则 hash = index + oldCapacity

评论