码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • HashMap


    JDK1.7:

    ArrayList 内部是数组结构

    LinkeList内部是链表结构

    TreeMap 是二叉树结构

    HashMap 是数组+链表

    读取(put)慢 会读取所有的key 确定有没有重复,通过hash优化

    Hash碰撞时两个不同的Key 取模时 得到了一样的key

    通过链表进行存放

    初始大小 1 << 4 ,16 ------和满载率0.75

    如果初始化小于0- -1则会抛异常,如果超出大小则取 1 << 30 = 10E

    满载率如果小或者null也会抛异常

    然后执行init

    new HashMap 并没有创建,而是声明一个数组

    HashMap 动态扩容,比原先大一倍 16X2,number X 2

    将数组第一位取值判断,为null 返回旧的值,如果没找到则添加元素,

    多线程中访问不是安全的

     key相同 返回旧的值,存新的值

    创建新节点,然后把原先的放到新节点,把旧的数据放到数组最后面

    2*resize 扩容大小

    transfer 拷贝数据引用

    get

    key = null 查找key forNull 会一直在第一个位置

    通过hash ,索引查找列表,判断hash是否相等,地址是否相等 equals

    数据结构 -- 数组+链表

    first insert

    hash冲突会执行二次哈希,通过链表

    默认容量16,会执行位运算

    内部数组是第一次put时候创建的,new HashMap 不会创建

    JDK1.8+

    默认容积依旧是16

    onlyIfAbsent true / false  有相同key 覆盖旧值, evict true /false 容积在创建中

    table = null 初始化 (resize),第一次添加元素创建数组

    如果新的元素为null 则创建新的节点,并且添加到next

    达到容量先添加元素再扩容,1.7则先扩容再添加元素

    //put 判断table 为Null则创建

    TreeNode 红黑树

    数组长度不到64 会进行扩容,否则执行树化,红黑树

    扩容,如果在旧数组Index= 1 ,新的数组则为1 或者17

    1.8之后数据从尾部插入

    拷贝数据则对旧数组进行与运算

    列表长度大于8的时候转为红黑树,判断链表是否大于64,然后转红黑树

  • 相关阅读:
    Vue响应式原理
    《回炉重造》——Lambda表达式
    使用分页查询(mybatis自带的)selectPage(page,wrapper)时报错
    stm32f4dma串口收数卡死
    (续)SSM整合之spring笔记(AOP 基于注解的AOP之前置通知)(P101)
    spring Aop报错的注意点
    基于SpringBoot的停车位智能管理系统的设计与实现_kaic
    MySQL导入sql文件的三种方法
    OSPF高级特性 —— LSA-3过滤 + Distribute-list过滤
    java计算机毕业设计-图片展示及购买网站-源程序+mysql+系统+lw文档+远程调试
  • 原文地址:https://blog.csdn.net/qq_29769851/article/details/134452732
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号