zoukankan      html  css  js  c++  java
  • Map

    HashMap

    • 底层结构
      • JDK8之前是数组加链表
      • 之后是数组加链表/红黑树
    • 线程不安全
    • 散列表,它存储的内容是键值对(key-value)映射。
    • 扩容:初始值16,当输入第17个时,扩容为原来的2倍
    • 解决哈希冲突
      • JDK8之前HashMap 通过 key 的 hashCode 经过扰动函数处理过后得到 hash 值,然后通过 (n - 1) & hash 判断当前元素存放的位置(这里的 n 指的是数组的长度),如果当前位置存在元素的话,就判断该元素与要存入的元素的 hash 值以及 key 是否相同,如果相同的话,直接覆盖,不相同就通过拉链法解决冲突。
      • 之后当链表长度大于阈值(默认为8)(将链表转换成红黑树前会判断,如果当前数组的长度小于 64,那么会选择先进行数组扩容,而不是转换为红黑树)时,将链表转化为红黑树,以减少搜索时间。
  • 相关阅读:
    自己总结的Java归并排序代码
    SpringDataJpa
    多态
    向上转型向下转型
    python面向对象装饰器
    Apache
    git
    μWSGI
    虚拟环境
    软件仓库(持续更新中)
  • 原文地址:https://www.cnblogs.com/wzh7/p/12716183.html
Copyright © 2011-2022 走看看