我需要你的帮助。如果我想在java中对PriorityQeueu进行排序,而不连接到它的属性 - 我可以使用hashCode的对象进行比较吗?
我是这样做到的:
comp = new Comparator<Person>() {
@Override
public int compare(Person p1, Person p2) {
if(p1.hashCode() < p2.hashCode()) return 1;
if(p1.hashCode() == p2.hashCode()) return 0;
return -1;
}
};
collector = new PriorityQueue<Person>(comp);
这听起来不是一个好方法。默认 hashCode() 通常通过将对象的内部地址转换为整数来实现。因此,对象在应用程序执行之间会有所不同。此外,具有相同属性值集的 2 个对象将不会返回相同的 hashCode 值,除非您覆盖实现。这实际上打破了可比性的预期合同。