HashMap概括(面试题)

一、HashTable与HashMap有啥区别?

  1. HashTable线程安全,不允许null值(key和value都不可以),HashMap线程非安全,允许null值(key和value都可以)
    注意:key为空没有hashcode,无法计算hash值。

二、HashMap1.7和1.8的区别

  1. HashMap1.7底层采用数组+链表实现
  2. HashMap1.8底层采用数组+链表+红黑树实现

三、HashMap的put方法底层是如何实现的?

  1. 判断key为空的情况下,存放数组下标为0的位置,
    默认HashMap的初始容量为16,加载因子大小16*0.75=12(当容量达到12时进行2倍扩容),
    根据key计算hash值,存放在数组对应下标位置,
    如果hash值相等且内容不等存放在同一个链表中,
    如果当前size>加载因子阈值,开始2倍扩容。

四、HashMap1.8为什么引入红黑树呢?

  1. 如果index冲突过多,导致链表过长,因为链表时间复杂度是On,为了解决链表查询效率慢的问题,这时候链表长度大于8的情况下并且数组的容量大于64的情况下就开始将链表转成红黑树存放,这时候时间复杂度从O(n)变成O(logn).

五、线程安全和不安全:

  1. 线程安全:指多个线程在执行同一段代码的时候采用加锁机制,使每次的执行结果和单线程执行的结果都是一样的,不存在执行程序时出现意外结果。
  2. 线程不安全:是指不提供加锁机制保护,有可能出现多个线程先后更改数据造成所得到的数据是错误的,不完整的数据
    举例说明:假如售票系统有1000张票,a和b同时来买票,如果是线程不安全,那么可能售票系统可能出现1000-1区同时执行的情况,最终结构是999而不是998张票。

六、解决多线程并发访问资源安全问题的方法:

  1. synchronized关键字,就是用来控制线程同步的,保证我们的线程在多线程环境下,不被多个线程同时执行,确保我们数据的完整性,使用方法一般是加在方法上。
  2. Lock是在java1.6被引进来,Lock的引入让锁有了可操作性,是指我们在需要的时候去手动的获取锁和释放锁,甚至我们还可以终端获取以及超时获取的同步特性,从使用上synchronize使用起来比Lock更方便。
HashMap面试题主要涉及以下几个方面: 1. HashMap的底层数据结构是什么? HashMap的底层数据结构是数组。当进行put()操作时,会进行hash计算,确定对象在数组中的位置。如果多个对象的值在同一个数组位置上,就会出现hash冲突,此时会使用链表来解决冲突。 2. JDK 1.8为什么引入了红黑树? JDK 1.8引入红黑树是为了解决链表过长导致的性能问题。当链表长度超过一定阈值(默认为8),链表会转换为红黑树来提高查找效率。 3. HashMap的内部类Node<K,V>是什么作用? HashMap的内部类Node<K,V>实现了Entry接口,用于存储键值对的数据。每个Node对象表示一个映射关系,包含了键和值。 以上是关于HashMap的一些常见面试题,希望对你有帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [史上最全Hashmap面试总结,51道附带答案,持续更新中...](https://blog.csdn.net/androidstarjack/article/details/124507171)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【硬核】HashMap最全面试题(附答案)](https://blog.csdn.net/weixin_43689480/article/details/118752906)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值