Java 集合框架之数据结构
1. 数组
特点:
A. 内存地址连续,使用前必须先指定其长度;
B. 可以通过下标访问数组中的元素,下标访问效率高;
C. 增删操作时性能较差,需要重新开辟一块连续的内存地址,并对数组中的元素进行移动。
2. 链表
特点:
A. 灵活的空间要求,存储空间不要求连续;
B. 不支持下标访问(虽然在操作时可以传入下标进行访问,但本质上还是遍历访问),支持顺序遍历访问;
C. 增删操作时比数组的效率更高,只需要修改关联节点的头尾头尾引用即可。
3. 树
3.1 二叉树
特点:
A. 一个节点的左子节点只包含小于该节点的值;
B. 一个节点的右子节点只包含大于该节点的值;
C. 从左到右,顺序排列。
不平衡的二叉树:
不平衡的二叉树查询查询效率不高,通过去除顶端优势,从而达到树的平衡。
3.2 红黑树
红黑树(RBT)是一个自平衡的二叉树,树上的每个节点都遵循如下规则:
1. 每个节点要么是黑色,要么是红色;
2. 根节点是黑色;
3. 每个叶子节点(NIL)是黑色;
4. 每个红色节点的两个子节点一定都是黑色;
5. 任意一个节点到每个叶子节点的路径所包含的黑色节点数量相同。
红黑树有两大操作:
1. recolor(重新标记黑色或红色);
2. rotation(旋转,使树节点达到平衡)。
红黑树练习网站: http://algoanim.ide.sk/index.php?page=showanim&id=63
红黑树插入场景的思维导图