HashMap和HashTable

区别

HashMap是线程不安全的,效率高,JDK1.2版本
Hashtable是线程安全的,效率低,JDK1.0版本的
2,HashMap可以存储null键和null值
Hashtable不可以存储null键和null值

HashMap 1.7:

1.在将键值对存入数组之前,将key通过hash算法获取hash值,将hash值作为数组下标,把下标对应的位置作为键值对存储的位置,该位置叫做桶。但是不同的key通过hashcode()方法后可能会有相同的hash值,这就会产生hash冲突,怎么解决呢?拉链法:将键值对对象封装为一个node节点,增加next指向,形成链表。每一个node节点也可以理解为一个Entry对象。
2.当元素个数超过 数组大小*负载因子 个后,会进行扩容,负载因子默认0.75,扩大一倍,然后重新计算每个元素在数组中的位置,很消耗性能。

HashMap1.8:

引入了数组+链表+红黑树,当链表个数超过8,链表就转换为红黑树,利用红黑树快速增删改查的特点提高HashMap性能。

如果两个键的hashcode相同,你如何获取值对象?

HashMap会使用键对象的hashcode找到bucket位置,找到bucket位置之后,会调用keys.equals()方法去找到LinkedList中正确的节点,最终找到要找的值对象。从HashMap中get元素时,首先计算key的hashCode,找到数组中对应位置的某一元素,然后通过key的equals方法在对应位置的链表中找到需要的元素。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值