31

これが私がJava5.0で使用したコードです

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

Collections.reverseOrder()は、要素の格納方法と反復方法を逆にするためにコンパレーターを取得するために使用されます。

それを行うためのより最適化された方法はありますか?

4

5 に答える 5

42

このアプローチが最適化されないのはなぜだと思いますか? 逆の順序は、実際の出力(または挿入されるオブジェクトComparatorの出力) の符号を反転させるだけなので、非常に高速であると思います。ComparatorcompareToComparable

descendingIterator()別の提案: 要素を格納する順序を変更するのではなく、メソッドを使用して降順で繰り返すことができます。

于 2009-07-07T08:14:01.233 に答える
10

TreeSet::descendingSet

Java 6 以降では、インターフェイス オブジェクトを生成するためにTreeSet呼び出されるメソッドがあります。descendingSet()NavigableSet

public 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
于 2010-05-18T21:54:13.793 に答える
7
TreeSet<Integer> treeSetObj = new TreeSet<Integer>(new Comparator<Integer>()
  {
  public int compare(Integer i1,Integer i2)
        {
        return i2.compareTo(i1);
        }
  });

結果を反転する必要があります。しかし、これは単なるマイクロ最適化だと思います...本当にこれが必要ですか?

于 2009-07-07T08:16:58.123 に答える