TreeSet的底层是基于TreeMap的,TreeMap的实现时基于红黑树(一种平衡二叉树)。
此树中,任意一个节点的都 大于等于它的左子树的最大值、小于等于右子树的最小值。
当你插入一个新值时,红黑树从根节点开始,跟当前节点作比较,如果小于当前节点的值,向左边找,如果大于当前节点的值,向右边找。
这样一直下去,会找到它的位置。然后,为了维护各种红黑性质,它会进行各种的调整,总体来说,它能实现 增、删、改、查 的时间复杂度都是 O(logn) 。
反正,你要知道,这个过程中要用到比较。
下面是从维基百科上摘抄的一段,让你对红黑树有一个大致的了解,具体内容,由于太复杂了,你还是自己去查阅资料吧。
红黑树是每个节点都带有颜色属性的二叉查找树,颜色为红色或黑色。在二叉查找树强制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求: 性质1. 节点是红色或黑色。 性质2. 根是黑色。 性质3. 所有叶子都是黑色(叶子是NIL节点)。 性质4. 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点) 性质5. 从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点。
|