map
1、HashMap特点:
无序、唯一、效率高,线程不安全,key可以存入null
是按照key进行总结的,因为底层key遵照哈希表的结构(数组+链表)
哈希表原理:比如放入这个集合的数据对应的那个类:必须重写hashCode方法和equal()方法
2、Hashtable特点:效率低,线程安全、key不可以存入null
3、LinkedHashMap:
底层:哈希表+链表
特点:唯一,有序
4、TreeMap:唯一、有序、底层原理:二叉树,key遵照二叉树的特点放入集合的key数据对应的类型内部一定要实现比较器(内部比较器,外部比较器)
Collections工具类:
Collection不支持创建对象,因为构造器被私有化了,里面的属性和方法都是被static修饰,我们可以直接使用类名,去调用即可。
Tree:
红黑树特点:平衡二叉树,左子树和右子树所在的层数是差不多的
hashMap的put过程:
hashMap的常见面试题:
1、装填因子、负载因子、加载因子为什么是0.75。
装填因子设置为1:空间利用率得到了很大的满足,很容易碰撞,产生链表的机率高—>查询效率低
装填因子设置为0.5:碰撞的概率低,扩容,产生链表的机率低——>查询效率高,空间利用率低。
2、主数组的长度为什么必须为2^n。
原因:h&(length-1) 等效 h%length操作,等效的前提就是:length必须是2的整数倍。如果不是2^n就不能进行与运算。
原因2:防止哈希冲突,位置冲突
ConcurrentHashMap:
常见面试题:
1、数据结构
2、参数
3、源码
4、扩容流程
5、CAS+synchronized
6、volatile
数据结构:
jdk1.7:数组+链表
jdk1.8:数组+链表+红黑树
为什么会增加红黑树:
提高查询效率,因为红黑树是平衡二叉树,可以使用二分法进行查找元素。