【校招VIP】java语言考点之Map1.7和1.8

发布时间 2023-08-14 15:10:52作者: 校招VIP

考点介绍:

HashMap是大中小厂面试的高频考点,主要从底层结构,和线程安全等角度来进行考察,考察点比较集中,但是有一定难度
分为初级和高级两种:初级一般集中在中小公司的map的key-value的可重复和可空问题;高级集中在1.7和1.8的变化,要理解变化的原因,以及并发安全性问题

 一、考点题目

1、HashMap的底层数据结构是什么?

解答:在JDK1.7 和JDK1.8 中有所差别:
在JDK1.7 中,由“数组+链表”组成,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的。在JDK1.8 中......

2、为什么HashMap在解决 hash 冲突的时候,不直接用红黑树?而选择先用链表,再转红黑树?

解答:因为红黑树需要进行左旋,右旋,变色这些操作来保持平衡,而单链表不需要。当元素小于 8 个的时候,此时做查询操作,链表结构已经......

3、HashMap默认加载因子是多少?为什么是 0.75,不是 0.6 或者 0.8 ?

解答:Node[] table的初始化长度length(默认值是16),Load factor为负载因子(默认值是0.75),threshold是HashMap所能容纳键值对的最大值。threshold = length * Load factor。也就是说......

4、说一下HashMap 的put方法流程?

解答:首先根据 key 的值计算 hash 值,找到该元素在数组中存储的下标;如果数组是空的,则调用......

5、为什么HashMap是线程不安全的?

解答:JDK1.7 中,由于多线程对HashMap进行扩容,调用了HashMap#transfer(),具体原因:某个线程执行过程中,被挂起,其他线程已经完成......

6、说一下HashMap 1.7和1.8的区别

解答:1 结构区别:HashMap1.8的底层数据结构是数组+链表+红黑树。HashMap 1.7的底层数据结构是数组加链表。2 扩容的区别......

7、HashMap、HashTable的key和value是否可为null?

解答:HashMap对象的key、value值均可为null。HahTable对象的key、value值均不可为null。且两者的的key值均不能......

二、考点文章

1、【校招VIP】java基础 HashMap1.7与1.8

老生常谈java常面 HashMap:首先都知道HashMap是线程不安全的那么聊一聊HashMap:默认初始化大小 16,负载因子 0.75 ,即当存放数据数量达到当前预计数量的 0.75时会发生扩容,扩容倍数 2 即发......

2、【校招VIP】JDK1.7和JDK1.8中HashMap为什么是线程不安全

只要是对于集合有一定了解的一定都知道HashMap是线程不安全的,我们应该使用ConcurrentHashMap。但是为什么HashMap......

3、HashMap、HashTable的key和value是否可为null

结论:HashMap对象的key、value值均可为null。HahTable对象的key、value值均不可为null。且两者的的key值......

4、【校招VIP】关于HashMap扩容机制

HashMap的底层有数组 + 链表(红黑树)组成,数组的大小可以在构造方法时设置,默认大小为16,数组中每一个元素就是一......

5、【校招VIP】HashMap精选面试题

HashMap的底层数据结构是什么?在JDK1.7 和JDK1.8 中有所差别:在JDK1.7 中,由“数组+链表”组成,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在......

三、考点视频

多线程执行下列代码后的值

本题是一道笔试题,属于偏复杂、对时间要求高的题型。主要是具化多线程,把临界点和对应的多线程起始位置画出来,需要细心和时间。建议笔试时,先把大题做完,再回来做这道题。这个题目也可以放到面试里,会引申出线程并发和安全的问题......