hashmap常见面试题

HashMap是一种非同步、线程不安全的键值存储结构,允许键为null但不允许重复。其底层基于哈希表,JDK7采用数组+链表,JDK8引入了红黑树。在put操作时,首先计算key的hashcode,发生碰撞时可能通过equals比较处理冲突。当容量超过负载因子0.75定义的阈值时,HashMap会进行扩容,扩容后长度翻倍。与Hashtable相比,HashMap不保证线程安全且允许null键值,而Hashtable默认容量为11,线程安全。
摘要由CSDN通过智能技术生成

hashmap的特性:
    1.hashmap是键值对存储实现快速存储,允许为null,key键不可重复,若键重复值将覆盖;
    2.非同步,线程不安全;
    3.底层是hash表不能保证有序性。
hashmap底层原理:
    1.是基于hash的原理,(jdk7是数组和链结构)jdk8后采用了数组+链表+红黑树的数据结构,通过get和put方法进行存储和获取对象,
    当我们给put方法传递键和值时,先对键做一个hashcode()的计算得到它在bucket数组中的位置来存储entry对象。当获取值时,通过get获取到bukect的位置,再通过键对象的equals方法找到正确的键值对,和然后返回对象。

hashmap中的put是如何实现的:

     1.计算key的hashcode值

     2.如果散列表为空,调用resize()初始化散列表

     3.如果没有发生碰撞,直接添加元素到散列表中

     4.如果发生碰撞1.若key值hashcode值和equals相同,替换。2.如果是红黑树结构,则调用树方法插入。

      5.如果桶满了大于阀值,则resize扩容。

两个对象hashcode值相等时:

        会产生hash碰撞,若key值相同则替换旧值,不然链接到链表后面,链表长度到达8时转成红黑树。

两个键的hashcode值相等

        hashcode相同时,使用equals方法比较内容获取对象。

如果hashm

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、付费专栏及课程。

余额充值