数据结构
数组
- 逻辑地址 物理地址连续
- 随机查找-通过下标查找 O1
- 数组对象大小不可变
- 三种初始化
- 扩容机制-全复制原数组 不会自动扩容
- 数组的初始化值为零值 0 null false
- ArrayList
- 自动扩容的
- 长度有限制吗-int最大值
- 默认初始值10
- 扩容1.5倍
- 满了扩容
- 线程不安全
- new ArrayList(100)这样有啥用
- 减少自动扩容的次数
- 缩容 手动调用 会将数组的长度缩减至现有元素的个数,用于节省空间
- 栈
- 先进后出
- 代码
- 队列
- 先进先出
- 代码
- 作业 用双栈实现一个队列
链表
- 地址可能不连续
- 插入 删除比较简单
- 无限定长度
- 线程不安全
- 查询效率 O(n)
- 单链表
- 双线链表
- 循环链表
- 头结点是否存数据
- 用代码实现
- 阻塞队列
- 线程安全
- 满了阻塞-入队
- 空了阻塞-出队
二叉树
- 前中后序遍历
- 层次遍历
- 完全二叉树 满二叉树
- 堆排序
- 每个节点最多有一个父节点
- 每个节点最多拥有两个子节点
- 有且仅有一个根节点
- 搜索二叉树
- Ologn ~ On
- 平衡二叉树
- 最小不平衡子树
- LL型 LR型
- 任何一个节点的左右子树高度差不超过1
- 红黑树
- 心是黑的-根是黑色的
- 事物绝对,每个节点要么是黑的要么是红的
- 每个红色节点的孩子都是黑的–两颗红心不能连接到一起
- 所有的叶子节点都是黑色的
- 从任意一个节点到他任意一个叶子节点,经过相同数目的黑色节点
- hashMap
map
k-v结构
- hashtable
- 整体加锁
- hashMap
- 数组长度开始默认16
- 负载因子的东西 0.75
- 扩容至2的n次方
- 1.7 数组+链表 O(n)
- 1.8 数组+链表/红黑树
- 链表长度>8 并且数组长度>=64(链表->红黑树)
- 该桶的元素数量<6 (红黑树->链表)
- ConcurrentHashMap
- 1.7
- 分段锁
- 1.8
- synchronized + CAS
- 1.7
二叉树
多叉树
-
b-树
-
普通节点也存有数据
-
-
b+树
- 只有叶子节点才存数据
- mysql中数据的组织形式之一
- 索引中的一种
-
b*树
图
- 有向图
- 无向图
- 最小带权路径
- 图的深搜
- 图的广搜