• JDK1.8 HashMap(1)


    序言

    触摸本质才能永垂不朽

    为什么面试都喜欢问HashMap

    HashMap(无序、线程不安全)作为一个键值对(key-value)的常见集合,在整个java的使用过程中都起着举足轻重的作用。

    HashMap数据结构

    HashMap底层是基于散列算法实现,散列算法分为散列再探测拉链式

    HashMap则使用了拉链式的散列算法,并在JDK 1.8中引入了红黑树优化过长的链表。利用红黑树快速增删改查的特点提高HashMap的性能。

    JDK版本实现方式节点数>=8节点数<=6
    1.8以前 数组+单向链表 数组+单向链表 数组+单向链表
    1.8以后 数组+单向链表+红黑树 数组+红黑树 数组+单向链表

    jdk1.7数据存储结构(采用数组+链表)

     

    Jdk1.8数据存储结构(采用数组+链表+红黑树)

    注意:在链表长度大于8后,查询复杂度由O(n)变为O(logn),将链表存储转换成红黑树存储(也就是TreeMap)

    红黑树R-B Tree简介(本质其实是2-3-4树):

     

    HashMap常见面试题

    • HashMap的底层数据结构?

    • HashMap的存取原理?

    • Java7和Java8的区别?

    • 为啥会线程不安全?

    • 有什么线程安全的类代替么?

    • 默认初始化大小是多少?为啥是这么多?为啥大小都是2的幂?

    • HashMap的扩容方式?负载因子是多少?为什是这么多?

    • HashMap的主要参数都有哪些?

    • HashMap是怎么处理hash碰撞的?

    • hash的计算规则?

    • 怎么解决hash碰撞,1.7中hashmap实现和1.8实现有何区别,hashmap中,为何链表达到一定大小红要转为红黑树
    • 为什么HashMap的数组长度要取2的整数幂

     https://blog.csdn.net/qq_40574571/article/details/97612100

    资料

    Java小白的源码学习系列:HashMap

    HashMap 源码详细解析 (JDK1.8)

    https://www.cnblogs.com/chengxiao/p/6059914.html

    https://www.cnblogs.com/sanzao/p/10371789.html

    https://www.cnblogs.com/Krloypower/p/10675686.html

    https://www.cnblogs.com/baixianlong/p/10703558.html

    Java集合 HashSet的原理及常用方法

    https://www.cnblogs.com/idea360/p/12424939.html

  • 相关阅读:
    Scheduled定时任务的触发规则
    linux设置系统时间为当前网络时间
    idea控制台打印日志出现乱码
    Nginx配置高可用的集群
    Nginx实现负载均衡
    BigDecimal比较大小
    Java调用第三方系统接口获取数据
    sql中主要关键字的执行顺序
    ASP.NET.Core --Jenkins+Docker
    ASP.NET.Core --Swagger+Route
  • 原文地址:https://www.cnblogs.com/cnki/p/10343873.html
Copyright © 2020-2023  润新知