class Ngram implements Comparable<Ngram>{
String name;
int count;
public Ngram(String name, int count){
this.name = name;
this.count = count;
}
...
@Override
public int compareTo(Ngram other){
return Integer.compare(this.count, other.count);
}
}
私のクラスにはcompareTo()メソッドしかありません。このメソッドは 'count'変数を使って比較します。マップのキーとしてNgramを使用すると、マップに新しいオブジェクトを挿入するときに「カウント」だけが考慮されることになりますか? equals()とhashcode()をクラスに追加する場合は、比較のためにインプリメンテーションで 'count'だけを使用する必要がありますか?compareToメソッドに基づいてmy equalsとhashcodeを実装する必要がありますか?
私の実際の質問は、Mapのキーを決定するときに、 "name"と "count"の組み合わせを使用したいのですが、マップまたはリストの要素をソートするときに、ソート目的でのみ使用できます。そのような場合、私のequalsとハッシュコードのメソッドは、比較基準として 'name'と 'count'の両方を使用しなければならないようですが、ソートにはcompareToメソッドで 'count'を使いたいだけです。どのようにこの二重の目的を達成するために?この需要は理にかなっていますか?
目標を達成するために、ほぼ同じクラスを2つ作成する必要がありますか? 2つのクラスの唯一の違いは、hashcode、equals、およびcompareTo()の実装です。そうですか?
どのようなマップですか? Comparatorを提供しない限り、このクラスをTreeMapのキーとして書かれたものとして使用することはできません。その場合、その動作はComparatorによって決定され、HashMapでない限り、compareTo()メソッドは一切呼び出されません。あなたの欠けている 'equals()'と 'hashCode()'メソッドだけです。したがって、 'Object'から継承され、' compareTo() 'メソッドも何もしません。また、HashMapのキーをソートすることはできません。あなたの質問は理にかなっていません。 – EJP