2009-07-07 89 views
22

这里订购元件是,我已经使用的Java 5.0TreeSet中以降序排列

TreeSet<Integer> treeSetObj = new TreeSet<Integer>(Collections.reverseOrder()) ; 

Collections.reverseOrder()的代码段用于以反转的方式,得到比较元素被存储和迭代。

有没有更好的做法呢?

+2

翻转的顺序```this```和```that```在重写```compareTo```所以物品被插入以相反的顺序。 – opyate 2014-01-24 11:23:48

回答

35

为什么你认为这种方法不会被优化?相反的顺序Comparator只是简单地翻转实际的Comparator输出的符号(或插入Comparable对象的compareTo的输出),因此我会想象它非常快。

另一种建议:您可以使用descendingIterator()方法以降序对它们进行迭代,而不是改变存储元素的顺序。

+1

谢谢。 descendingIterator()方法在6.0中引入,并且在5.0中不存在 – 2009-07-07 08:30:05

4
TreeSet<Integer> treeSetObj = new TreeSet<Integer>(new Comparator<Integer>() 
    { 
    public int compare(Integer i1,Integer i2) 
     { 
     return i2.compareTo(i1); 
     } 
    }); 

需要翻转结果。但我想这是只是一个微型优化 ...你真的需要这个吗?

+0

不,这不是必需的。 – 2009-07-07 08:30:56

9

如果您使用的是Java 6,有一个叫descendingSet().

descendingSet

公共NavigableSet descendingSet()

降序set受此 set支持,所以改变方法集合 反映在下降集合,反之亦然 。如果任一组被修改 ,同时在任一组进行迭代的过程中(除了通过迭代器 自己的remove操作) ,该 结果的迭代是不确定的 。

The returned set has an ordering equivalent to 

Collections.reverseOrder(comparator())。 表达式 s.descendingSet()。descendingSet() 返回等价于s的s实质上 的视图。

Specified by: 
     descendingSet in interface NavigableSet<E> 

    Returns: 
     a reverse order view of this set 
    Since: 
     1.6