HashMap面试模拟(一)

HR:你平常使用Hashmap嘛?

 U:用啊

 

HR:你可以简单的说下HashMap吗

U:嗯!好的

  首先HashMap是一种键值对的形式存储的集合,无索引,无序,键是不重复的。

 

HR:嗯 为什么它是无索引的呢?

U:因为它的底层数据结构取决:

    在jdk1.7之前是采用数组+单向链表。

    在jdk1.8开始之后采用了数组+单向链表+红黑树

 

HR:为什么jdk1.8要采用数组+单向链表+红黑树?

U(嘴角微微上扬):因为在jdk1.7采用数组+单向链表,如果在很多数据的情况会出现单向链表长度特别长,查询的效率大打折扣。而在jdk1.8采用数组+单向链表+黑红树,

当数组长度大于64且单向链表长度大于8就转红黑树的方式存储。

 

HR(小东西?哼!):嗯 hashmap是怎么样去重复的呢

U:hashMap底层是采用hashcode()判断是否一个对象,然后再调用equals(),如果结果是true,则表示数据已经存在了。

 

HR(嗯):那为什么要先采用hashcode()呢

U:可以排除那些是不同一个对象,就不进行下一步比较了

 

HR:hashMap线程安全吗?为什么?

U:不安全,因为有可能出现进行hash算法了出现了俩个一样的位置值(index),这是会出现hash冲突,导致线程不安全

 

HR(嗯?还不错哦):有什么方式使hashMap线程安全呢?

U:有,我们可以是使用同步的方式Conlections.synchronizeMap(hashMap);

 

 HR:好,我们今天先到这里把。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                                              tip:欢迎指点 谢谢!

 

posted @ 2020-09-02 17:04  王子月  阅读(52)  评论(0)    收藏  举报