java 面试问题 HashMap
又是栓Q的一天
目录
前言
一、HashMap的实现原理
二、常见面试题HashMap和HashTable的区别
1.父类不同
2.线程安全
3.方法的不同
4.键值约束
5.冲突存储
三、HashMap扩容机制的原理
四、基本面试题
1.什么是java?
2.java的特点有哪些?
3.JVM、JDK、JRE是什么关系?
4.java如何实现跨平台?
5.什么是字节码文件,采用字节码文件的好处?
总结
前言
HashMap的基本结构和HashMap的常见的面试题
一、HashMap的实现原理
HashMap是一个储存键值对的双列数组,每一个键值对存放在Entry中,所有Entry存放在一个数组中,我们称之为桶,这个桶是HashMap的主干,注意的是HashMap并不能保证映射的顺序,并且插入后的数据的顺序也不能保证一直不变(扩容rehash),在jdk1.8前是使用数组+链表,jdk1.8及以后优化为了数组+红黑树
二、常见面试题HashMap和HashTable的区别
1.父类不同
HashMap集成自AbstractMap,HashTable继承自Dictionnary
2.线程安全
HashMap是线程不安全的,而HashTable的方法大多使用了Synchronize是线程安全的,但是现在大多也不用了,经常使用的是currentHashMap
3.方法的不同
HashMap不包含contains方法,而是containsKey和containsValue方法,而HashTable都包含
4.键值约束
HashMap允许key和value的值为null,HashTable都不能为空
5.冲突存储
jdk1.8以前HashMap使用的是数组+链表的方式进行解决和HashTable一样,但是jdk1.8及以后他在冲突长度大于8的时候会转换为数组+红黑树的方式
三、HashMap扩容机制的原理
capacity变量容量默认为16
loadFactor加载因子,默认是0.75阈值
阈值=容量*加载因子,当元素的数量超过阈值就会触发扩容,每次扩容的容量是之前的二倍,扩展后的Node对象可能在原位置,也可能移动到原偏离量两倍的位置
四、基本面试题
1.什么是java?
java是面向对象的编程语言,抛弃了C++中的指针和多继承,吸收了许多其他的优点,功能强大,简单易用。
2.java的特点有哪些?
封装、继承、多态、跨平台、多线程
3.JVM、JDK、JRE是什么关系?
JDK=JRE+编译工具、JRE=JVM+运行环境、JVM虚拟机
4.java如何实现跨平台?
java文件编译成字节码文件,通过不同的java虚拟机可以在不同的平台上运行
5.什么是字节码文件,采用字节码文件的好处?
字节码是java编译后产生的class文件,好处:可以被不同的虚拟机进行解释执行,实现跨平台的运行
总结
今天真的是太累了太累了,博主下午为了面对即将到来的实习,花了很大的精力准备了微服务的分布式项目,因为环境配置,弄那些个docker什么的弄了一个晚上,真的是没有精力了,还有TreeMap、LinkedHashMap、跟currentHashMap等等,真的是栓Q,剩下的明天在更新。