美文网首页
记录下HashMap

记录下HashMap

作者: 杨大魔王 | 来源:发表于2019-08-16 19:54 被阅读0次

jdk1.7以下 数组桶 + 拉链法
jdk1.8开始 数组桶 + 拉链/红黑树,
ps:决定拉链还是红黑树(取决于 桶长度 和 拉链长度,需要同时满足)

两个条件, 而转树条件 和 转链表条件 是 8 和 6
这两个值不同, 是因为防止在 数据频繁增加删除,造成频繁的转换操作

桶大小 16 成倍增长
数组桶成长因子 0.75
数组桶中存储的数据 为hashcode 异或 hashcode>>16位 (被称为“扰动”)
为了解决
ex:数据的地址为 100 200 300 桶长为 10 那么求 余数 后得到结果都是 0
但是 >>3位(假装10进制右移)后,再异或原数据,求余数后 得到的结果为 1 2 3 可以使分布更加均匀

因为String的hashcode算法不是内存地址位置,而是String内容的计算结果
所以可以轻易的制造 hashcode相同的String,会使几乎O(1)(一般碰撞很低)的查找
变成O(n)(因为拉链过长)这样使HashMap的效率疯狂下降,而如果效率很低发生在
高并发的服务器中,则有可能造成服务器瘫痪的可能。

为解决以上情况,引入了红黑树逻辑,当拉链过长时,会转换成红黑树。
查找时间优化为 O(log2n)加快了服务进度

相关文章

  • 记录下HashMap

    jdk1.7以下 数组桶 + 拉链法jdk1.8开始 数组桶 + 拉链/红黑树,ps:决定拉链还是红黑树(取...

  • Map简单记录

    Map 笔记 今天学习了 map 中的 hashMap 和 concurrentHashMap 区别,简单记录下。...

  • HashMap里面的一个细节

    扫了一眼Java8的HashMap的代码,发现一个细节,觉得值得一记。 我们知道Java8里面的HashMap做了...

  • HashMap了解一下

    前言 HashMap HashMap类继承图 HashMap属性 HashMap构造函数HashMap(int i...

  • HashMap源码

    eg: HashMap hashMap = new HashMap<>(); hashMap.put(1,"QG...

  • Android面试复习

    想到什么就记什么吧 java基础篇 HashMap实现原理及源码分析 RXjava RXJava的好处:(1)简洁...

  • 2018-03-12

    HashMap in Java HashMap in Redis HashMap in Golang

  • Java HashMap VS LinkHashMap

    最新在梳理Java,顺便分享记录下,供大家参考。从以下几个地方对比阐述两个类的异同。 存储结构 HashMap 说...

  • HashMap源码理解

    HashMap理解 HashMap定义 HashMap实现机制 HashMap与HashTable的主要区别 关键...

  • 【16】 hashmap

    hashmap 1.7 和1.8的区别 hashmap全家桶 hashmap 源码解析 hashmap hashm...

网友评论

      本文标题:记录下HashMap

      本文链接:https://www.haomeiwen.com/subject/iftcsctx.html