Treeset按降序排列元素

Gau*_*ini 30 java collections core treeset

这是我用于Java 5.0的一段代码

TreeSet<Integer> treeSetObj = new TreeSet<Integer>( Collections.reverseOrder() ) ;
Run Code Online (Sandbox Code Playgroud)

Collections.reverseOrder()用于获取比较器,以反转元素的存储和迭代方式.

有更优化的方式吗?

Ada*_*ski 41

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

另一种建议:不是更改存储元素的顺序,而是可以使用该descendingIterator()方法按降序迭代它们.


Bri*_*ian 10

如果您使用的是Java 6,则有一个名为descendingSet()的方法.

descendingSet

public NavigableSet descendingSet()

降序集由此集支持,因此对集的更改将反映在降序集中,反之亦然.如果在任一集上的迭代正在进行时修改了任一集(除非通过迭代器自己的删除操作),否则迭代的结果是未定义的.

    The returned set has an ordering equivalent to
Run Code Online (Sandbox Code Playgroud)

Collections.reverseOrder(比较()).表达式s.descendingSet().descendingSet()返回s的视图,该视图基本上等效于s.

    Specified by:
        descendingSet in interface NavigableSet<E>

    Returns:
        a reverse order view of this set
    Since:
        1.6
Run Code Online (Sandbox Code Playgroud)


Pie*_*rre 6

TreeSet<Integer> treeSetObj = new TreeSet<Integer>(new Comparator<Integer>()
  {
  public int compare(Integer i1,Integer i2)
        {
        return i2.compareTo(i1);
        }
  });
Run Code Online (Sandbox Code Playgroud)

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