我有以下代码片段:
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 (Java6)是这样说的:
SortedSet headSet(E toElement)返回该集合中元素严格小于toElement的部分的视图。返回的集合由这个集合支持,所以返回集中的变化反映在这个集合中,反之亦然。返回的集支持此集支持的所有可选集操作。
根据以上所述,程序只需打印"-1“。javadoc忘记了下降的情况吗?
提前感谢
发布于 2011-10-22 13:00:22
如果您引用的javadoc片段引用的是泛型比较,而不是显式地说得更少,那么它会更精确。在descendingSet()的文档中描述了这个案例:
返回的集合具有等价于Collections.reverseOrder(comparator()).的排序
发布于 2011-10-22 12:59:07
这一切都是正确的。navigableSet的元素按asc顺序:-1,1,2。navigableSet.descendingSet()的元素以相反的顺序排列: 2,1,-1。headSet(1)将集合的头部(集合的左边部分)切割到元素1,因此返回2。
因为您已经使用了descendingSet,所以升序/降序的概念被改为相反的。
https://stackoverflow.com/questions/7859668
复制相似问题