繁体   English   中英

以降序排列元素的树集

[英]Treeset to order elements in descending order

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

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

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

有没有更优化的方法?

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

另一种建议:与其更改存储元素的顺序,不如使用descendingIterator()方法按降序迭代它们。

TreeSet::descendingSet

在 Java 6 和更高版本中, TreeSet上有一个名为descendingSet()的方法,用于生成NavigableSet接口对象。

公共 NavigableSet 降序集()

降序集合由该集合支持,因此对集合的更改反映在降序集合中,反之亦然。 如果在对任一集合进行迭代时修改任一集合(通过迭代器自己的删除操作除外),则迭代结果未定义。

 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
TreeSet<Integer> treeSetObj = new TreeSet<Integer>(new Comparator<Integer>()
  {
  public int compare(Integer i1,Integer i2)
        {
        return i2.compareTo(i1);
        }
  });

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

使用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); 
    } 
} 

反向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);
        }
}
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM