HashMap的常见面试题整理

谈一下HashMap的基本特性?

  • 1.HashMap存储键值对实现快速存取,允许为null。key值不可重复,所以只允许一个key值为null, value无限制, 若key值重复则覆盖。

  • 2.非同步,线程不安全。

  • 3.底层是hash表,不保证有序(比如插入的顺序)

HaspMap的结构

JDK1.8之前 JDK1.8 之前 HashMap 底层是 数组和链表 结合在一起使用也就是 链表散列。

JDK1.8之后 相比于之前的版本, JDK1.8之后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时,将链表转 化为红黑树,以减少搜索时间。

谈一下hashMap中put是如何实现的?

1.计算关于key的hashcode值

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

3.如果发生了碰撞(hashCode值相同),若key地址相同或者equals后内容相同,则替换旧值

谈一下hashMap中get是如何实现的?

对key的hashCode进行hashing,与运算计算下标获取bucket位置,如果在桶的首位上就可以找到就直接返回,否则在树中找或者链表中遍历找,如果有hash冲突,则利用equals方法去遍历链表查找节点。

平时在使用HashMap时一般使用什么类型的元素作为Key?

选择Integer,String这种不可变的类型,像对String的一切操作都是新建一个String对象,对新的对象进行拼接分割等,这些类已经很规范的覆写了hashCode()以及equals()方法。作为不可变类天生是线程安全的,

猜你喜欢

转载自blog.csdn.net/weixin_46837596/article/details/108227782