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
インターフェイスオブジェクト。
public NavigableSet descendingSet()
降順セットはこのセットに連動しているため、セットへの変更は降順セットに反映され、逆も同様です。いずれかのセットの反復が進行中にいずれかのセットが変更された場合(反復子自体の削除操作を除く)、反復の結果は未定義です。
_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);
}
});
結果を反転する必要があります。しかし、私はこれが単なる マイクロ最適化だと思う...あなたは本当にこれが必要ですか?
compare
を反転compare
の Comparator
メソッドで2つの引数の順序を逆にすることができます。
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);
}
}
}