为什么在覆盖的比较方法中在 (Person p2 = (Person) o2;) 处出现 ClassCastException。:(
实际上,比较覆盖方法中的值不是 Person Object,而是以“Jim”和“Jack”(键值)的形式出现。所以 Cast Cast Exception 。但是为什么它带有键而不是值,即 Person 对象,为什么它只适用于键。有没有其他方法可以根据值对其进行排序。
如果错了请纠正我
1) 我们可以在 TreeMap 中传递比较器对象,它会相应地对其进行排序。?
2)总是在 Keys 上执行排序。?
3)我们如何在不使用集合对象的情况下对 Map 的值进行排序(是否可能),为什么默认不支持?
公共类 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;
}
}