根据API,天花板应该返回大于或等于给定元素的数字或null,在下面的代码中为什么-12的上限为-12?
NavigableSet<Integer> sset = new TreeSet<>();
sset.add(-12);
sset.add(-13);
sset.add(-11);
sset.add(24);
//why the ceiling of -12 is -12? there are number greater then -12 in the set
System.out.println(sset.ceiling(-12));
System.out.println(sset.ceiling(0));
System.out.println(sset.ceiling(24));
System.out.println(sset.ceiling(100));
答案 0 :(得分:0)
引用您提及的文档链接:
返回此集合中最少元素大于或等于 给定元素,如果没有这样的元素,则返回null。
答案 1 :(得分:0)
请注意,它是一个Sorted TREE,并且该方法返回此集合中 least element 大于或等于给定元素
尝试理解这种实际上会让你回到最高限度的方法。
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;
}
以下内容将返回-11和-13,因为它们最不大于或等于给定元素。
System.out.println(sset.ceiling(-11));
System.out.println(sset.ceiling(-13));