オーバーライドされた比較メソッドで (Person p2 = (Person) o2;) で ClassCastException が発生するのはなぜですか。:(
実際には、Person オブジェクトの代わりに、オーバーライドされた比較メソッドの値は「Jim」と「Jack」(キー値) として提供されます。だからキャストキャスト例外。しかし、値ではなくキー、つまり Person オブジェクトが付属しているのはなぜですか。なぜキーにのみ適用されるのですか。値に基づいて並べ替える他の方法はありますか。
間違っていたら訂正してください
1) それに応じてソートする TreeMap にコンパレータ オブジェクトを渡すことができます。
2) ソートは常に Keys に対して実行されます。?
3) コレクション オブジェクトを使用せずに Map をその値で並べ替えるにはどうすればよいですか (それは可能ですか)。また、デフォルトでサポートされていないのはなぜですか?
public class HashTableExamples {
/**
* @param args
*/
public static void main(String[] args) {
SortedMap persorSorted = new TreeMap(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
Person p2 = (Person) o2;
return 2;
}
});
Person p = new Person(10);
Person p1 = new Person(20);
persorSorted.put("Jim", p);
persorSorted.put("Jack", p1);
Iterator sortedit = persorSorted.entrySet().iterator();
while (sortedit.hasNext()) {
Map.Entry pairs = (Map.Entry) sortedit.next();
Person pw = (Person) pairs.getValue();
System.out.println("From SortedMap : " + pw.getAge());
}
}
public static class Person {
Person(int agevalue) {
this.age = agevalue;
}
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}