zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    c++的const总结
    http框架--Forest 的使用
    SQL 语句大全
    Mysql 总结
    【Spring注解驱动开发】使用@Scope注解设置组件的作用域
    注册中心EUREKA(二)--配置列表
    Linux命令发送Http GET/POST请求
    真正理解NIO
    高并发下接口幂等性解决方案
    代码量统计工具
  • 原文地址:https://www.cnblogs.com/cnki/p/10343873.html
Copyright © 2011-2022 走看看