HashMap的一些知识

HashMap与HashTable的区别
HashMap的线程不安全,效率较高,可以允许空值,存放在第0个位置。
HashTable的线程安全,效率较低,不运行空值,否则报错。

HashMap的原理
HashMap底层使用“数组+链表”。初始容量是16,加载因子是0.75,使用的"Entry"对象封装的键值对。

在jdk8中,HashMap底层使用“数组+链表+红黑树”。初始容量是16,加载因子是0.75,使用的"Node"对象封装的键值对。

hashCode与equals的区别
hashCode比的是哈希编码值,可能它们相等,但是内容不一样。
equals比的是对象内容地址,它们相等的话,hashCode值也要相等。

HashMap的put方法的实现
HashMap在jdk1.7时采用链表加数组的方式实现,使用HashEntry封装键值对。根据key来算出index下标,要是产生HashCode碰撞的话,使用链表来进行存放(jdk1.7中,采用的是头插法,在多线程扩容中可能会产生死锁现象,jdk8中,采用了尾插法)。

HashMap的扩容
HashMap默认数组容量是16,加载因子是0.75。HashMap容量在大于等于12时会开始扩容,在原来的数组容量基础上乘以2。

HashMap的加载因子为什么是0.75
因为加载因子过小的话,会很消耗内存空间,但是冲突的概率会比较小。
加载因子过大的话,冲突的概率会比较大,但是空间利用比较好。于是为了有较好的空间利用性和冲突不是很大的情况下,进行实验,发现0.75是个平衡值,所以使用了它。

--------------------------------------From Clam Person Understanding ------------------------------------------------
--------------------------------------Only Reference For You -------------------------------------------------------------
--------------------------------------Also Hope To Get Your Advice ------------------------------------------------------

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值