我正在阅读TreeSet并发现它很有趣。我有一个问题,我们有一个TreeSet
String
。在这种情况下,Ceiling
和floor
函数的行为如何。
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
答案 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。