我有这段代码:
public static void main(String[] args)
{
NavigableSet<String> myset = new TreeSet<String>();
myset.add("a");
myset.add("aa");
myset.add("b");
myset.add("bb");
myset.add("c");
myset.add("cc");
System.out.println(myset.ceiling("a"));
System.out.println(myset.floor("aaa"));
System.out.println(myset.higher("a"));
System.out.println(myset.lower("bb"));
}
我认为它会打印出来:a,b,null,c
。因为例如higher("a")
应该提供null
,因为a是此树的根,但它提供aa
。 higher
的定义是Returns the least element in this set strictly greater than the given element, or null if there is no such element.
因此,严格意义上的更大意味着大于a
,但由于a
是三者的根,所以没有什么比它更重要。 aa
按字母顺序排在a
之后。
实际上它会返回我想要的确切对位。这是为什么。这对我来说似乎很不合逻辑。有什么想法吗?
答案 0 :(得分:3)
因为例如更高(“a”)应该给出null,因为a是这棵树的根,但是它给出了aa。
哪个元素是树的根并不重要,但是如果树是平衡的并且它应该是中间值,例如'“bb”'应该是根。
“aa”是“a”之后的第一个,因为String以相同的字符开头,但它更长,所以这是预期的结果。
因为a是三者的根,所以没有什么比它更重要了。
"a"
是最小的,所以没有比它更小。
它返回我想要的确切对位。
在数字中,我们从0,1,2,3等开始从左到右依次增加。
在字母表中我们说a,b,c,d从左到右增加。即a <&lt; b&amp;&amp; a&lt; ç
令人困惑的是比较是ASCIIbetical换句话说,字母的ASCII码的顺序很重要。 (更具体地说,编码为UTF-16时使用的代码)这意味着'0'&lt; '9'和'9'&lt; 'A'和'A'&lt; 'Z'但是'Z'&lt; 'a'和'a'&lt; 'Z'