红黑树(平衡的排序二叉树),满足以下性质:
1)每个结点要么是红的,要么是黑的。
2)根结点是黑的。
3)每个叶结点,即空结点(NIL)是黑的。
4)如果一个结点是红的,那么它的俩个儿子都是黑的。
5)对每个结点,从该结点到其子孙结点的所有路径上包含相同数目的黑结点
根据性质5,我们得出:从根到叶子的最长的可能路径不多于最短的可能路径的两倍长
红黑树的关键性质: 内部保证有序,旋转开销小,整体相对平衡
红黑树的应用:
1、java8 hashmap中链表转红黑树。
优势:时间复杂度从O(n)-->O(logn) ,且自旋开销较其他树较低(不用整体平衡)。
2、epoll在内核中的实现,用红黑树管理事件块(文件描述符)。
优势:
1、因为内核态需要维护一个长久存放fd的数据结构,而fd变动十分频繁,且需要支持快速查询,且所以红黑树很适合。
2、红黑树可以判断是否是重复的fd
-----
其实我感觉用hash表也可以
3、Java的TreeMap实现
相对与hashMap优势,内部key保持有序,且支持自定义排序比较器。
适用场景,对数据需要排序统计
4、linux进程调度Completely Fair Scheduler,用红黑树管理进程控制块
CFS 背后的主要想法是维护为任务提供处理器时间方面的平衡(公平性)。这意味着应给进程分配相当数量的