Java面试题-Java基础(⑭)-集合
集合晨考
1.JDK8HashMap数据结构,以及存放数据的过程数组 + 単向链表 + 红黑树
当我们添加一个元素,先根据key计算出来hash值,再使用hash值对数组长度-1进行&运算,获取到的数值作为存放在数组的下标
如果此位置为空,则直接存放
如果此位置有元素,则再判断key值是否完全相同
如果相同,则直接覆盖如果不同,在判断此节点为树节点还是链表节点,分别以不同的方式添加元素
2. HashMap和Hashtable的区别
Hash Map线程不安全 初始化(第一次添加元素)数组长度为16 扩容为2倍 允许键和值为nul
Hashtable线程安全 初始化(调用无参构造方法)数组长度为11 扩容为2倍+1不允许键和值为nul
3.HashMap是哪个接口的实现类,初始容量是多少,增长多少,负载因子是多少,什么含义
Map接口,初始(第一次添加元素)数组长度为16 扩容为2倍负载因子0.75F表示数组的使用率达到75%就扩容
4.遍历HashMap的几种方式
1.获取所有的键 keySet0 再通过键获取到值
2.获取所有的值 values()
3.获取所有键值对的组合 entryset()
以上三种方式的选代器形式
5.HashSet去重复的原理是什么
比较两个对象 equals为true 并且hashCode相同 则认为是重复的对象
6.HashSet底层实现
地层实现为HashMap实例
7.Properties推荐存储数据的方法是什么,原因是什么
setProperty() 因为Properties类继承自Hashtable 所以可以直接调用继承自父类的put以及 putAII方法 但是不推荐使用 因为这两种允许添加非String类型的数据
8.如果要使用TreeSet存储一个自定义类型的数据,有什么要求
此类必须实现Comparable接口 或者 单独编写类实现Comparator接口 定义比较规则
9.Comparable和Comparator的区别是什么?
Comparable 因为排序规则编写在本类中 属于自然排序Comparator因为排序规则单独编写一个类中属于非自然排序