2017-04-15 5 views
0

コンストラクタ内に無名コンパレータを作成する際に問題があります。次のように私の指示は、以下のとおりです。キャストを使用してコンストラクタ内の無名コンパレータを比較可能

は「あなたのコードは、キータイプが同等であると仮定すべきである、つまり、Comparableを実装する」

しかし、我々は

private Comparator<K> _comparator; 

を使用している私たちのデータstrctureもありノードのプライベートクラス:

private static class Node<K,V> extends AbstractEntry<K,V> { 
    Node<K,V> left, right; 
    Node(K k, V v) { 
     super(k,v); 
     left = right = null; 
    } 
} 

私はこのようにそれを書いてみました:

​​

しかし、これは正しいとは言えません。ノードを比較したり、そのキーが整数であると仮定していないからです。私もComparableへのチェックされていないキャストを使用することになっています、そして、私はどのようにこれを行うかを理解できません。次のように

割り当てからの実際の手順は以下のとおりです。

はあなたが書くだろうクラスの2つのコンストラクタがあります:1はnullであってはならないキータイプ、のためのコンパレータをとります。もう一方はそうではありませんが、このコンストラクタが使用されている場合、コードでは、キーの型が匹敵している、つまり、Comparableを実装していると想定する必要があります。次に、この仮定を使用してcompareToメソッドを使用して作業を行うコンパレータを作成します。

ヒントやアイデアをいただければ幸いです。

+0

我々は*ノードを比較することになっていない*:あなたは何をしています比較するはずですか?コンパレータは何のために使われていますか?指示は何ですか? –

+0

多くの情報が追加されました。うまくいけば助かります。 – mmsky

答えて

1

OK。そのため、比較可能なキーをソートするコンパレータを、自然順序付けを使用して作成する必要があります。私。 compareToメソッドに委譲するだけです。

ですから、

Comparator<K> comparator = (a, b) -> ((Comparable<K>) a).compareTo(b); 

をしたいか、あなたが本当に匿名内部クラスとしてそれを書きたい場合:

Comparator<K> comparator = new Comparator<K>() { 
    @Override 
    public int compare(K a, K b) { 
     return ((Comparable<K>) a).compareTo(b); 
    } 
}; 
+0

ああ!そうですか。 Comparable内でComparableをキャストしてcompareToを呼び出す...私は宣言のどこかでComparableをキャストしようとし続けました。どうもありがとうございます!私はこれに永遠にこだわってきた、笑。 – mmsky

関連する問題