我有以下代码段:
class Cert {
public static void main(String[] args) throws IOException {
NavigableSet<Integer> navigableSet = new TreeSet<Integer>();
List a = new ArrayList<Integer>();
a.add(1);
a.add(2);
a.add(-1);
navigableSet.addAll(a);
Iterator< Integer> iterator = navigableSet.descendingSet().headSet(1).iterator();
while (iterator.hasNext())
{
System.out.print(iterator.next() + " ");
}
}
}
此代码返回“2”。但这是headSet的官方javadoc(Java 6)所说的:
SortedSet headSet(E toElement) 返回此set的部分视图,其元素严格小于toElement。返回的集由此集支持,因此返回集中的更改将反映在此集中,反之亦然。返回的集支持此集支持的所有可选集操作。
根据以上所述,程序应仅打印“-1”。 javadoc是否忘记了下降的情况?
提前致谢
答案 0 :(得分:2)
如果引用的javadoc片段引用了泛型比较,而不是明确地说小于,则它会更精确。 descendingSet()
的文档中描述了这种情况:
返回的集合的排序等价于 Collections.reverseOrder(比较())。
答案 1 :(得分:1)
这都是正确的。 navigableSet
具有按顺序排列的元素:[ - 1,1}。 navigableSet.descendingSet()
具有相反顺序的元素:[2,1,-1]。 headSet(1)将集合的头部(一组的左侧部分)剪切到元素1,因此返回[2]。
因为您使用了descendingSet
,所以升序/降序概念改为相反。