二叉树:
在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)左子树<根节点<右子树
AVL树:
最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为1,所以它也被称为高度平衡树。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。特点:是一颗二叉搜索树;左右节点也是AVL树;-
红黑树 :
是一种自平衡二叉查找树,是一种特化的AVL树,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。特点:节点是红色或者黑色;根节点是黑色;每个叶子节点是是黑色;每个红色节点的两个字节的是黑色;从每个叶子节点到根的所有路径上不能有两个连续的红色节点;从任意一节点到其每个叶子的所有路径都包含相同数目的黑色节点;最长路径不超过最短路径的两倍。
为什么使用红黑树?
1.保持平衡的特点,
2性能比较高下面是TreeSet的一个无参构造方法
public TreeSet()
{
this(new TreeMap<E,Object>());
}
从上面代码可以看出TreeSet的底层是用TreeMap实现的。
对于 TreeMap 而言,它采用一种被称为“红黑树”的排序二叉树来保存 Map 中每个 Entry —— 每个 Entry 都被当成“红黑树”的一个节点对待。
- 自然排序(Comparable)
TreeSet类的add()方法中会把存入的对象提升为Comparable类型
调用对象的comparaTo方法和集合中的对象比较
根据comparaTo方法返回的结果进行存储
- 比较器排序(Comparator)
创建TreeSet的时候可以制定一个Comparator
如果传入了Comparator的子类对象,那么TreeSet就会按照比较器的顺序排序
add()方法内部会自动调用Comparator接口中的compare方法的第二个参数