导航设置上限为负数

时间:2014-08-19 15:08:12

标签: java set

根据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));


2 个答案:

答案 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));