Sorting 使用hashCode()对java中的对象进行排序,而不是在HashTable和ect中

Sorting 使用hashCode()对java中的对象进行排序,而不是在HashTable和ect中,sorting,compare,comparator,hashcode,Sorting,Compare,Comparator,Hashcode,我需要你的帮助。 如果我想在java中对PriorityQEUU进行排序,而不连接到它的属性,那么我可以使用hashCode的对象进行比较吗 我是这样做的: comp=新比较器(){ @凌驾 公共整数比较(人员p1、人员p2){ if(p1.hashCode()

我需要你的帮助。 如果我想在java中对PriorityQEUU进行排序,而不连接到它的属性,那么我可以使用hashCode的对象进行比较吗

我是这样做的:

comp=新比较器(){
@凌驾
公共整数比较(人员p1、人员p2){
if(p1.hashCode()
这听起来不是个好办法。 默认hashCode()通常通过将对象的内部地址转换为整数来实现。因此,对象的顺序在应用程序执行之间会有所不同。
此外,具有相同属性值集的2个对象将不会返回相同的hashCode值,除非重写实现。这实际上打破了可比性的预期契约。

那么,你还有其他建议吗?除非您实现了正确的比较器,否则您的优先级队列和未排序的集合一样好。我只是想说清楚。使用hashCode,您将在一个应用程序实例(JVM)中获得一致的顺序。这根本不是正确的方法。
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);