java 以降序排列元素的树集

omvjsjqw  于 2022-10-30  发布在  Java
关注(0)|答案(5)|浏览(126)

下面是我在Java 5.0中使用的代码

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

Collections.reverseOrder()被用于获得比较器,以便反转存储和迭代元素的方式。
有没有更优化的方法?

i7uaboj4

i7uaboj41#

为什么你认为这种方法不会被优化呢?反向顺序Comparator只是将实际Comparator的输出(或插入Comparable对象上的compareTo的输出)的符号翻转,因此我认为它非常快。
另一个建议是:您可以使用descendingIterator()方法以降序迭代元素,而不是更改存储元素的顺序。

iecba09b

iecba09b2#

第一个月

在Java 6和更高版本中,TreeSet上有一个名为descendingSet()的方法,它生成NavigableSet接口对象。
公共可导航集descendingSet()
降序集由该集支持,因此对该集的更改将反映在降序集中,反之亦然。如果在对任一集进行迭代时修改了任一集(除非通过迭代器自己的移除操作),则迭代的结果是未定义的。

The returned set has an ordering equivalent to

表达式s. descendingSet().descendingSet()返回s的一个视图,该视图本质上等同于s。

Specified by:
        descendingSet in interface NavigableSet<E>

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

jk9hmnmh3#

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

需要翻转结果。但我猜这只是一个micro-optimization...你真的需要这个吗?

ubby3x7f

ubby3x7f4#

使用descendingSet方法可以反转类中的现有treeSet

import java.util.TreeSet; 

public class TreeSetDescending { 

    public static void main(String[] args) 
    { 
        // Declare a treeset 
        TreeSet<Object> ints = new TreeSet<Object>(); 
        ints.add(2); 
        ints.add(20); 
        ints.add(10); 
        ints.add(5); 
        ints.add(7); 
        ints.add(3); 

        // Initialize treeset with predefined set in reverse order 
        // using descendingSet() 
        TreeSet<Object> intsReverse = (TreeSet<Object>)ints.descendingSet(); 

        // Print the set 
        System.out.println("Without descendingSet(): " + ints); 
        System.out.println("With descendingSet(): " + intsReverse); 
    } 
}
8ftvxx2r

8ftvxx2r5#

反转compare

您可以颠倒Comparatorcompare方法中两个参数的顺序。

TreeSet t = new TreeSet(new MyComparator());
  {
class MyComparator implements Comparator
{
  public int compare(Integer i1,Integer i2)
        {
         Integer I1=(Integer)i1;
         Integer I2=(Integer)i2;
         return I2.compareTo(I1);  // return -I1compareTo(I2);
        }
}
  }

相关问题