2

署名付きのクラス PriorityList があります

Tree<Key extends Comparable<Key>, Value>
(これは与えられたもので、変更できません)。要素Treeは、キーを指定して、ある順序で挿入されます (つまり、キーのcompareToメソッドを考慮します)。

私が持っているとしましょうTree<Integer, Integer>。デフォルトcompareToの整数は昇順を考慮します。Tree必要に応じて、要素を降順で挿入できるようにしたいと考えています。MyIntegerを実装して独自にComparable持つ別のクラスをおそらく作成できることはわかっています。compareTo

しかし、別の方法はありますか?私が本当に望んでいるのはTree、値の順序をどうにかして伝えることができるようにすることです。

2 番目の質問: を変更できた場合Tree、コンパレータを引数として渡すにはどうすればよいでしょうか? (ジェネリック型の構文を念頭に置いてください)。

4

2 に答える 2

2

あなたはそれを行うための2つの方法に名前を付けました:コンパレータを渡すか、キーを比較可能にします。クラスで独自のコンパレータを渡せない場合は、キーを使用したり、Comparableインターフェイスを使用して独自のサブクラスを作成したりすることができません。

代替コードは次のようになります。

public class Tree<K,V>{
   public Tree( Comparator<K> cmp ) {...}

}
于 2013-03-15T23:10:18.460 に答える
0

リバース用に新しいクラスを作成する必要はありません。Collections.reverseOrder()を使用Comparatorして、特定のものの逆を取得できます。

2 番目の質問については、ツリーにセッターを追加するだけです。のようなもの: setComparator(Comparator<Key> c)そして、あなたのTree.

于 2013-03-15T23:18:14.343 に答える