Java中TreeSet的上限和下限功能的内部工作

时间:2019-02-10 18:07:23

标签: java treeset

我正在研究一个问题,我需要找到值差最大为k的那对。现在,在Java中设置的树为我做到了,但是我很好奇这是如何工作的。我假设它创建了某种存储桶,并将该存储桶与哈希图中的某些值进行映射。

我检查了intelliJ中的定义,但找不到解释其工作原理的任何内容。

我在Treemap中找到了这段代码,现在我想了解它的实际工作原理

final Entry<K,V> getCeilingEntry(K key) {
        Entry<K,V> p = root;
        while (p != null) {
            int cmp = compare(key, p.key);
            if (cmp < 0) {
                if (p.left != null)
                    p = p.left;
                else
                    return p;
            } else if (cmp > 0) {
                if (p.right != null) {
                    p = p.right;
                } else {
                    Entry<K,V> parent = p.parent;
                    Entry<K,V> ch = p;
                    while (parent != null && ch == parent.right) {
                        ch = parent;
                        parent = parent.parent;
                    }
                    return parent;
                }
            } else
                return p;
        }
        return null;
    }

1 个答案:

答案 0 :(得分:2)

Java中的Set数据结构由Map s支持。该集合将元素存储为映射中的键,并使用静态对象作为值的占位符。因此,天花板和地板功能也被委托给地图。例如;

public E ceiling(E e) {
   return m.ceilingKey(e);
}

因此TreeSetTreeMap支持。

TreeMap是一棵红黑树(至少在Java 7及更高版本中),它是一个自平衡二进制搜索树。 https://en.wikipedia.org/wiki/Red%E2%80%93black_tree

希望这会有所帮助