对HashMap的深度理解

对HashMap的深度理解

1、什么是HashMap

	基于Hash算法的Map(图),是一种数据结构。
	List、Set、Map、Queue都是数据结构
	数据结构:
			线性结构(数组、列表List、队列、栈……)ps:可以理解为连成一条的房子
			树(二叉树、B树……)
			堆
			图

2、HashMap中的Hash

hash是一种广义的算法,是一种思想。

	什么是Hash?散列(中文音译哈希)。
		思路:把任意长度的输入,通过散列算法变成固定长度的输出(提炼、摘要)
		(ps:人间本来就很艰难,不要拆穿人家了。 摘要:人艰不拆)
		想要查看字符的哈希值可以调用hashCode()方法	对象.hashCode()
		对于同一个hash算法。同样的输入,会有同样的输出。ps:同样的输出可能有完全不一样的输入
		
	
	【特点】(有图解)
			1、不同的输入,进过hash算法之后的输出可能会重复
			2、很难找到逆向的规律(ps:根据输出无法反推出输入是什么)

	应用场合?
		提高存储空间的利用率
		提高查询的效率
		做数字签名保证数据传递的安全性
		作为加密的一种方式

图解

3、初步认识HashMap

	数组+hash算法就组成了HashMap
	特点:查找非常快!(以为着效率高)
	(ps:数组100w个元素,查找一个你要的元素,平均要50w次。链表LinkedList比数组还慢~)

	第一个认识:它的内部的基础结构都是数组。
	第二个认识:put进去的键值对是无序的。
	第三个认识:put一个key-value的时候,先根据key计算一个hash值,得出存放的位置。
	(ps:在通过hash算法计算不同的key时可能会输出相同的hash值,就会产生hash冲突,而hash冲突会导致查找速度变慢)
		HashMap如何处理【hash冲突】?
		首先需要认识HashMap类中几个重要属性:
				capacity:容量,桶的个数(ps:数组中的每个元素都是一个桶)
				size:实际装的数量
				loadFactor:负载因子,决定了容量什么时候扩大(ps:size到了容量的百分之多少,就扩大容量)
				threshold:扩容的阈值,size达到多少个数量的时候,就扩大容量,等于capacity*loadFactor
		当冲突有点多,Node的next属性不为空时,就组成链表
		当冲突非常多,一个桶后面跟了7个桶,就升级为红黑树
	(ps:下方图解)

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值