处理降序集时headSet()/ tailSet()问题

时间:2011-10-22 12:54:23

标签: java

我有以下代码段:

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是否忘记了下降的​​情况?

提前致谢

2 个答案:

答案 0 :(得分:2)

如果引用的javadoc片段引用了泛型比较,而不是明确地说小于,则它会更精确。 descendingSet()的文档中描述了这种情况:

  

返回的集合的排序等价于   Collections.reverseOrder(比较())。

答案 1 :(得分:1)

这都是正确的。 navigableSet具有按顺序排列的元素:[ - 1,1}。 navigableSet.descendingSet()具有相反顺序的元素:[2,1,-1]。 headSet(1)将集合的头部(一组的左侧部分)剪切到元素1,因此返回[2]。

因为您使用了descendingSet,所以升序/降序概念改为相反。