我正在研究一个问题,我需要找到值差最大为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;
}
答案 0 :(得分:2)
Java中的Set
数据结构由Map
s支持。该集合将元素存储为映射中的键,并使用静态对象作为值的占位符。因此,天花板和地板功能也被委托给地图。例如;
public E ceiling(E e) {
return m.ceilingKey(e);
}
因此TreeSet
由TreeMap
支持。
TreeMap
是一棵红黑树(至少在Java 7及更高版本中),它是一个自平衡二进制搜索树。 https://en.wikipedia.org/wiki/Red%E2%80%93black_tree
希望这会有所帮助