hashmap面试题

解决Hash冲突的方法,HashMap采用了什么方法解决Hash冲突?

HashMap使用哈希表来存储数据的,当然哈希表不可避免的就会遇到hash冲突问题,解决hash冲突的方法大致有两种:1,开放地址法。2,链地址法。

1,开放地址法:当地址发生冲突时,按着某种方法继续探测哈希表中的其他存储单元,直到找到空位置为止。

2,链地址法:链地址法就是数组加链表的结合,在每一个数组元素上都有一个链表结构,当地址发生冲突时就讲数据存放在链表中。

而HashMap就是采用链地址法进行解决hash冲突的。

HashMap初始值的大小和负载因子的大小?

hashMap初始长度就是16,负载因子是0.75。HashMap所容纳的最大数据量为:长度*负载因子。即当长度达到这个值的时候就会发生扩容。

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

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

我们能否让HashMap同步?

通过Map m = Collections.synchronizeMap(hashMap)实现同步。在synchronizeMap中给HashMap的所有操作增加synchronized竞争监视器锁来实现线程同步。

为什么HashMap是线程不安全的?如何体现出不安全的?

当多个线程对HashMap就行put操作时,如果put的key相同会产生碰撞,那么HashMap会将两个key放在数组的同一位置,其中一个线程的key会被覆盖。

hashmap底层的get方法

get()首先通过计算key的hash值找到在数组中的下标,若下标处元素为空则直接返回null,否则判断该下标处元素是否是要查找的元素,是就直接返回,不是就判断该元素节点是否为红黑树节点,是就进行红黑树节点的查找,否则遍历链表进行查找。

hashmap遍历的几种方式(代码实现)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想养一只!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值