天花板,地板将如何在TreeSet of String上运行

时间:2014-12-16 11:39:11

标签: java treeset

我正在阅读TreeSet并发现它很有趣。我有一个问题,我们有一个TreeSet String。在这种情况下,Ceilingfloor函数的行为如何。

    NavigableSet<String> ns= new TreeSet<String>();
    ns.add("Yogi");
    ns.add("Yogendra");
    ns.add("Yogesh");
    ns.add("hello");
    String ns1= ns.ceiling("Yog");
    System.out.println(ns1);

Output==> Yogendra

3 个答案:

答案 0 :(得分:5)

有关这两种方法的文档,请参阅here

对于Numbers更容易解释,然后对于String as String,内部将使用compareTo方法,除非您将自定义Comparator传递给treeset的构造函数。请考虑以下代码:

TreeSet<Integer> set = new TreeSet<Integer>();
set.add(1);
set.add(2);
set.add(3);
set.add(4);
set.add(5);

Cieling说

Returns the least element in this set greater than or equal to the given element, or null if there is no such element.

因此,如果我想搜索10,我看不到任何大于10的元素,因此它会返回null。 Wile,如果我想搜索0,下一个更大的元素是1,所以它将返回1.如果我给4,那么我有完全匹配所以它将返回4.

虽然楼层说:

Returns the greatest element in this set less than or equal to the given element, or null if there is no such element

所以如果我想搜索0,我在整个集合中看不到任何小于0的元素,因此它会返回null。 Wile,如果我想搜索10,下一个较小的元素是5,所以它将返回5.如果我给4,那么我有完全匹配所以它将返回4.

对于String,它将在内部调用compareTo方法并按字典顺序比较两个字符串,其行为与整数相同。

答案 1 :(得分:1)

它们的行为方式与您选择放入TreeSet<E>的任何引用类型的行为方式相同。

返回的元素将由TreeSet的顺序决定,如果你不提供{{1},这将是String s(词典顺序)的自然顺序。对构造函数,或由您选择使用的Comparator<String>确定的顺序。

答案 2 :(得分:0)

        TreeSet<String> treeSet = new TreeSet<String>();
        treeSet.add("aaa");
        treeSet.add("ddd");
        treeSet.add("bbb");
        treeSet.add("ccc");

        System.out.println(treeSet.ceiling("aaa"));
        output : aaa
        System.out.println(treeSet.ceiling("aab"));
        output : bbb
        System.out.println(treeSet.ceiling("bbb"));
        output : bbb
        System.out.println(treeSet.ceiling("bbbb"));
        output : ccc
        System.out.println(treeSet.ceiling("dddd"));
        output : null
        System.out.println(treeSet.floor("aaa"));

         System.out.println(treeSet.floor("aaa"));
         output : aaa
        System.out.println(treeSet.floor("aab"));
    output : aaa
    System.out.println(treeSet.floor("bbb"));
    output : bbb
    System.out.println(treeSet.floor("bbbb"));
    output : bbb
    System.out.println(treeSet.floor("aa"));
    output : null

根据Javadoc:

Ceiling返回此set中大于或等于给定元素的最小元素,如果没有这样的元素,则返回null。

Floor返回此集合中小于或等于给定元素的最大元素,如果没有这样的元素,则返回null。