这是我用于 Java 5.0 的一段代码
TreeSet<Integer> treeSetObj = new TreeSet<Integer>( Collections.reverseOrder() ) ;
Collections.reverseOrder()用于获取比较器,以反转元素的存储和迭代方式。
有没有更优化的方法呢?
这是我用于 Java 5.0 的一段代码
TreeSet<Integer> treeSetObj = new TreeSet<Integer>( Collections.reverseOrder() ) ;
Collections.reverseOrder()用于获取比较器,以反转元素的存储和迭代方式。
有没有更优化的方法呢?
为什么你认为这种方法不会被优化?相反的顺序Comparator
只是将输出的符号从实际Comparator
(或插入compareTo
的Comparable
对象上的输出)翻转过来,因此我认为它非常快。
descendingIterator()
另一种建议:与其更改存储元素的顺序,不如使用该方法以降序遍历它们。
TreeSet::descendingSet
在 Java 6 及更高版本中,有一个TreeSet
称为descendingSet()
生成NavigableSet
接口对象的方法。
公共 NavigableSet 降序集()
降序集由该集支持,因此对集的更改会反映在降序集中,反之亦然。如果在对任一集进行迭代时修改了任一集(通过迭代器自己的删除操作除外),则迭代的结果是未定义的。
The returned set has an ordering equivalent to
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
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
您可以颠倒您的compare
方法中两个参数的顺序Comparator
。
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);
}
}
}