HashMap的总结

HashMap
基于hash算法的图,是一种数据结构。List、Set、Map、Queue(队列)都是数据结构(容器)
数据结构:
线性结构(数组、列表List、队列、栈…)
树(二叉树、B树…)

1、Hash算法
什么是Hash?散列(或音译哈希)
把任意长度的输入,通过散列算法变成固定长度的输出:摘要算法
(人生本来就很艰难,不要拆穿人家 ,摘要:人艰不拆)
对于同一个Hash算法,同样的输入,会有同样的输出。
在这里插入图片描述

【特点】
1、不同的输入,经过hash之后的输出可能或重复
2、很难找到逆向的规律(根据结构无法反推出来原文或反推出输入的是什么)

用来干什么?
提高存储空间的利用率
提高查询的效率
作述职签名保证数据传递的安全性
作为加密的一种方式
MD4、MD5=Message Digest消息摘要

2、HashMap
第一个认识:它内部的基础结构是数组。
第二个认识:put进去的键值对不是按顺序排列的
第三个认识:put一个key-value的时候,先根据key计算出一个hash值,
得出存放的位置

HashMap如何处理【hash冲突】?
桶:数组中的每一个元素就是一个桶,不冲突的时候每个桶只存一个键值对Node
冲突有点多,Node的next属性不为空,组成链表
冲突非常多,一个桶超过8个,升级为红黑树
在这里插入图片描述
HashMap类中几个重要的属性:
Capacity:容量,数组的长度
Size:实际装的数量
LoadFactor:负载因子,百分比,size到了百分之多少,就开始扩大容量(决定容量什么时候扩 大)
Threshold:扩容的阈值,size达到多少个数量的时候,就扩大容量,等于capacity*loadFactor

public V put(K key, V value){
Return putVal(hash(key),key,value,false,true);
}

Java中的hashCode:是int类型,取值范围-21亿多到+21亿多,42亿多种可能性
重复的概率很高

数组+hash算法
Key value

Node[key:李四,value:001]
王五 002
赵柳 003

特点:查找非常快!100w个键值对,根据key进行hash计算
数组100w个元素,找到一个需要的元素,平均要多少次?50w次
最快1次、最慢100w次
比数组还慢的是链表LinkedList

猜你喜欢

转载自blog.csdn.net/yu2875592987/article/details/105387804