集合

 

 一、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,从任意节点 到 其每个叶子节点的 所有路径都包含相同的黑色节点(黑色高度相同)

插入和删除节点或导致红黑树不平衡,当红黑色不平衡时,有两种调整方式**【变色】和【旋转】**

 

posted @ 2022-11-08 16:27  靓仔aa  阅读(22)  评论(0)    收藏  举报