TreeMap底层红黑树原理?
请解释Java中TreeMap的底层数据结构红黑树(Red-Black Tree)。说明红黑树的五大特性、自平衡操作(左旋/右旋/变色)、以及与HashMap相比的时间复杂度和适用场景。
回答
专业代码师
TreeMap:基于红黑树(Red-Black Tree)实现的有序Map,按照key的自然顺序或Comparator排序。
红黑树五大特性:
- 每个节点是红色或黑色
- 根节点是黑色
- 叶子节点(NIL)是黑色
- 红色节点的两个子节点都是黑色(不能有连续的红节点)
- 任意节点到其所有叶子节点的路径上黑色节点数相同
自平衡操作:
- 左旋:将节点下移到左子位置,右子上升到父位置
- 右旋:对称操作
- 变色:红变黑或黑变红
性能:
- 插入/删除/查找:O(log n)
- HashMap为平均O(1),但TreeMap有序
适用场景:需要有序遍历(如范围查询、排序输出)、需要floor/ceiling/headMap/tailMap等范围操作时。
TreeSet:底层是TreeMap,key为存储元素,value为PRESENT常量对象。