Map

HashMap

  • 底层结构
    • JDK8之前是数组加链表
    • 之后是数组加链表/红黑树
  • 线程不安全
  • 散列表,它存储的内容是键值对(key-value)映射。
  • 扩容:初始值16,当输入第17个时,扩容为原来的2倍
  • 解决哈希冲突
    • JDK8之前HashMap 通过 key 的 hashCode 经过扰动函数处理过后得到 hash 值,然后通过 (n - 1) & hash 判断当前元素存放的位置(这里的 n 指的是数组的长度),如果当前位置存在元素的话,就判断该元素与要存入的元素的 hash 值以及 key 是否相同,如果相同的话,直接覆盖,不相同就通过拉链法解决冲突。
    • 之后当链表长度大于阈值(默认为8)(将链表转换成红黑树前会判断,如果当前数组的长度小于 64,那么会选择先进行数组扩容,而不是转换为红黑树)时,将链表转化为红黑树,以减少搜索时间。
原文地址:https://www.cnblogs.com/wzh7/p/12716183.html