HashMap


前言

HashMap的数据结构分析


一、HashMap的数据结构

当JDK1.7时,HashMap的数据结构是:数组(16)+ 链表
在这里插入图片描述

当JDK1.8时,HashMap的数据结构是: 数组(16)+ 链表 + 红黑树
在这里插入图片描述

二、数据结构的由来


1. 问 : HashMap为什么使用数据和链表?????

数组的长度是16,当由于一些元素的Hash值相同,所以就放到了一个数组里,造成了Hash冲突,于是出现了链表,通过链表串联,但由于链表元素过多,导致查询效率变慢,于是出现了红黑树。
在这里插入图片描述

2. 问:什么是红黑树???

构造红黑树的唯一准则:max《= min*2(永远保持在性能较低)
红黑树生成的规则:大于第一个数的,放右边,小于第一个数的放左边
单链:(不平衡的情况下)会进行选择,将右边的数放到左边(达到加快查询速率)
红黑树的本质:二叉树又为平衡二叉树
红黑树中:查询速率最高的=》平衡二叉数


3. 问 :JavaJDK1.8为什么加入红黑树?只是为了提高查询效率吗???

解决服务器dos的问题=》服务器=》受到攻击
HashMap会导致服务器Dos(拒绝服务)
1.比如:HashMap在线程安全的情况下(单线程)(加锁机制)如果使用HashMap都可能导致服务器Dos
2.CVE-2011-4858:(漏洞披露):信息安全漏洞或者已经暴露出来的弱点)
3.容器:比如Tomcat:由于Tomcat使用了(HashMap表),受到影响,导致Dos
关系:链表过长=》导致查询效率慢=》服务器Dos =》必要条件 1.JDK1.8,2.链表长度>8 =》红黑树
Tomcat解决Dos方案:Tomcat通过Max参数=》限制参数数量 (减少Dos)


4. 问:HashMap出现Dos具体表现形式:cpu100%


5. 问:cpu%怎么解决????

1.(kill-9)(jstack)(jmap)(arthas)
具体解决方式:JVM
通过JVMd性能排查=》查具体线程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值