【校招VIP】java容器之HashMap结构和线程安全

214 阅读4分钟

考点介绍:

HashMap是大厂java语言的常考点,主要从底层结构,和线程安全等角度来进行考察,考察点比较集中,但是有一定难度

本期分享的java容器之HashMap结构和线程安全,分为试题、文章以及视频三部分。

答案详情解析和文章内容点击下方链接即可查看!

一、考点题目

1.Java都有哪些map,分别怎么实现的,具体讲

解答:map的主要特点是键值对的形式,一一对应,且一个key只对应1个value,且key唯一。其常用的map实现类主要有HashMap、HashTable、TreeMap、ConcurrentHashMap、LinkedHashMap、weakHashMap等等……

2.HashMap底层为什么是数组链表呢?在链表中查询的效率不是很低吗?

解答:在JDK1.7以及1.7版本之前,HashMap对数组元素即链表的查询确实是从头节点开始查询的,这样链表一旦长了,效率比较低也是意料之中。而在1.8中对HashMap的数据结构进行了一定的优化,其中增加了一个阈值对数组元素进行判断是否有必要进行红黑树变形(红黑树是一种二叉查找树),一旦链表长度达到了阈值,其数据结构便会变形为红黑树,提高了查询效率,但插入的效率并没有链表头插法那么高……

3.HashMap树化条件?退化条件?

解答:HashMap具体实现类中有两个变量,哈希表的链表树化成红黑树有两个条件:链表长度大于TREEIFY_THRESHOLD,哈希数组的长度大于MIN_TREEIFY_CAPACITY。退化条件:扩容 resize( ) 时,红黑树拆分成的 lo 和 hi 两颗红黑树,每一颗树的结点数小于等于临界值 6 时退化成链表……

4.HashMap和HashTable的区别

解答:1.两者父类不同,HashMap是继承自AbstractMap类,Hashtable是继承自Dictionary类。不过它们都实现了同时 实现了map、Cloneable(可复制)、Serializable(可序列化)这三个接口。2.对外提供的接口不同,Hashtable比HashMap多提供了elments() 和contains() 两个方法。elments() 方法继承自ashtable的父类Dictionnary。elements() 方法用于返回此Hashtable中的value的枚举……

(答案点击下方链接查看哦)

二、考点文章

1.小白入门——哈希算法

哈希,哈希(Hash)也称为散列,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,这个输出值就是散列值。哈希表,哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。散列表是算法在时间和空间上作出权衡的经典例子……

2.hash算法原理详解

散列方法的主要思想是根据结点的关键码值来确定其存储地址:以关键码值K为自变量,通过一定的函数关系h(K)(称为散列函数),计算出对应的函数值来,把这个值解释为结点的存储地址,将结点存入到此存储单元中。检索时,用同样的方法计算地址,然后到相应的单元里去取要找的结点。通过散列方法可以对结点进行快速检索……

3.HashMap——八股文必背

HashMap底层原理是什么?HashMap就是以key-value形式存储数据的一种数据结构,在我们平常开发中非常常用,它在 JDK 1.7 和 JDK 1.8 中底层数据结构是有些不一样的。总体来说,在JDK1.7中它的底层实现是数组加链表使用 Entry 类存储 Key 和 Value,,而在1.8之后底层实现则是数组加链表加红黑树使用 Node 类存储 Key 和 Value。当然,这里的 Entry 和 Node 并没有什么不同,我们来看看 Node 类的源码……

三、考点视频

1.String、StringBuilder的区别

本题是面试常考题之一,但是很多同学没有真实理解或使用过相应的类,只靠记忆。在面试的时候,容易被问住。三个对象底层都是基于数组实现,数组就存在连续内存的扩张。即会产生性能和线程安全问题.……

移动端链接:m.xiaozhao.vip/dTopic/deta…

PC端链接:xiaozhao.vip/dTopic/deta…