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:欢迎指点 谢谢!

浙公网安备 33010602011771号