集合
一、ArrayList
使用ArrayList()创建ArrayList对象时,不会定义底层数组的长度,当第一次调用add(E e) 方法时,初始化定义底层数组的长度为10,之后调用add(E e)时,如果需要扩容,则调用grow(int minCapacity) 进行扩容,长度为原来的1.5倍。
二、HashMap
面试题一:
HashMap是如何实现容量扩充的?
初始化容量扩充为16
当保存内容的容量扩充超过了与阈值*0.75=12时,就会进行容量的扩充。
在进行扩充的时候HashMap采用的成倍的扩充模式即:每一次扩充两倍(源码用的左移运算符1<<)
面试题二:HashMap的工作原理
在HashMap之中进行数据存储的依然是利用Node类完成的,那么这种情况就是可以使用的数据结构之后两种:链表和二叉树,本质区别在于时间复杂度不同,链表存储时间复杂度O(n),二叉树存储O(logn)(树的高度)
从jdk1.8开始,HashMap的实现出现了改变,因为其要适应大数据的海量数据存储,其存储发生了改变,并且HashMap内部中提供了一个特别重要的常量:
在使用HashMap存储数据的时候,如果保存的数据个数没有超过阈值8,那么会按照链表的方式存储;
则会将链表转为红黑树实现树的平衡,并且利用左旋与右旋来保证数据的查询性能。
扩展红黑树:

红黑树的特点:
1.节点是红色或者黑色,
2,根节点是黑色的
3,每个叶子的节点都是黑色的空节点(NULL)
4,每个红色节点的两个节点都是黑色的
5,从任意节点 到 其每个叶子节点的 所有路径都包含相同的黑色节点(黑色高度相同)
插入和删除节点或导致红黑树不平衡,当红黑色不平衡时,有两种调整方式**【变色】和【旋转】**


浙公网安备 33010602011771号