Hashmap常见的一些面试题

1.Hashmap的数据结构
jdk1.8 之前 hashmap的结构由数组+链表组成
jdk1.8之后hashmap的结构变为当链表的长度大于8并且数组长度大于64时,将链表转化为红黑树。

2.Hashmap的工作原理
hashmap 底层是hash数组和单向链表的实现,数组中每个元素都是链表,由node的内部类实现,hashmap通过put和set方法来获取和储存

存储时,首先根据来调用String类中重写之后的的hashcode方法计算出值,再与&(数组长度-1)进行计算得到索引值。
若索引值不存在,则直接储存;
若索引值存在,则去比较hashcode是否相同,
若hashcode值相同,则去更新v,
若hashcode值不同,则在链表上增加节点;

3.数组扩容过程
当hashmap中的数据个数超过数组长度*负载因子的乘积时,数组进行扩容,扩大一倍,扩容非常麻烦,每次要遍历其中元素,在编写程序中,要尽量避免这些问题

4.红黑树
每个节点非红既黑,
根节点都是黑色的,
如果节点是红色的,则他的子节点是黑色的
使用红黑树是因为其查找效率高在规定条件下0(logN),链表为oN

5.linkedHashmap 保证了记录的插入,用iterator遍历时,先取到的值肯定是先插入的,遍历比hashmap慢
treemap 实现sortmap接口,能够把他保存下的记录根据键排序

hashmap一般用于插入,删除,定位元素
treemap一般用于 在需要按自然顺序或自定义顺序遍历键的情况下
lingedhashmap 在需要输出的顺序和输入的顺序相同

6.hashmap与hashtable
1.两者的存储结构和解决冲突的方法是一样的
(1.建立公共溢出区法2.链地址法[添加红黑树]3.再哈希法4.开放定址法)
2.hashmap是线程不安全的,hashtable是安全的
3.因为线程安全所以hashtable效率低
4.hashmap初始化数组大小为16,hashtable为11,扩容时,hashmap扩大两倍,hashtable扩大两倍+1;

7.hashmap会在线程安全方面产生哪些问题
1.7中,扩容时会造成环形链或数据丢失
1.8中,会发生数据覆盖的情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值