【发布时间】:2013-01-12 13:48:19
【问题描述】:
为什么在覆盖的比较方法中在 (Person p2 = (Person) o2;) 处得到 ClassCastException。 :(
实际上,比较覆盖方法中的值不是 Person 对象,而是“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;
}
}
【问题讨论】:
-
这就是 TreeMap 的作用。它按 keys 排序。有一些解决这个问题的黑客方法,包括将地图存储在比较器中。
-
你应该在这里使用泛型,并创建一个合适的
Comparator<String>。如果你正确使用泛型,这样的代码甚至不会编译。 -
@MattBall 很抱歉没有使用泛型,我只是在编写代码以根据值对其进行排序。我想即使我们使用泛型它也会失败,因为键是 String 。我只是想知道我的意思是为什么地图中的值有这种限制
标签: java sorting map sortedmap