2009-07-07 18 views
22

降順に要素を注文するTreeSetの私は、Java 5.0のために使用したコードのピースここ順序

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

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

もっと最適化された方法がありますか?

+2

項目は逆の順序で挿入されるようにオーバーライド '' compareTo'''で '' this'''と '' that'''の順序を反転。 – opyate

答えて

35

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

代わりの提案:要素を格納する順序を変更する代わりに、descendingIterator()メソッドを使用して降順で反復処理することができます。

+1

ありがとうございます。 descendingIterator()メソッドが6.0で導入され、5. –

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

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

+0

には存在しませんでした。これは必須ではありません。 –

9

は、Java 6を使用している場合は、descendingSet().

descendingSet

公共のNavigableSet descendingSetを()

降順セットはに変更して、この セットによってバックアップと呼ばれる方法がありますセットは が下降セットに反映され、 の逆もあります。いずれかのセットが変更された場合、いずれかのセットの反復が進行中の ( イテレータの独自の削除操作を除いて)である場合、 の結果は となります。

The returned set has an ordering equivalent to 

Collections.reverseOrder(comparator)。 式 s.descendingSet()。descendingSet() は、本物の のビューを返す。

Specified by: 
     descendingSet in interface NavigableSet<E> 

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