これが私がJava5.0で使用したコードです
TreeSet<Integer> treeSetObj = new TreeSet<Integer>( Collections.reverseOrder() ) ;
Collections.reverseOrder()は、要素の格納方法と反復方法を逆にするためにコンパレーターを取得するために使用されます。
それを行うためのより最適化された方法はありますか?
これが私がJava5.0で使用したコードです
TreeSet<Integer> treeSetObj = new TreeSet<Integer>( Collections.reverseOrder() ) ;
Collections.reverseOrder()は、要素の格納方法と反復方法を逆にするためにコンパレーターを取得するために使用されます。
それを行うためのより最適化された方法はありますか?
このアプローチが最適化されないのはなぜだと思いますか? 逆の順序は、実際の出力(または挿入されるオブジェクトComparator
の出力) の符号を反転させるだけなので、非常に高速であると思います。Comparator
compareTo
Comparable
descendingIterator()
別の提案: 要素を格納する順序を変更するのではなく、メソッドを使用して降順で繰り返すことができます。
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
TreeSet<Integer> treeSetObj = new TreeSet<Integer>(new Comparator<Integer>()
{
public int compare(Integer i1,Integer i2)
{
return i2.compareTo(i1);
}
});
結果を反転する必要があります。しかし、これは単なるマイクロ最適化だと思います...本当にこれが必要ですか?