【问题标题】:Use hashCode() for sorting Objects in java, not in HashTable and ect使用 hashCode() 对 java 中的对象进行排序,而不是在 HashTable 等中
【发布时间】:2017-06-14 09:34:52
【问题描述】:

我需要你的帮助。 如果我想在 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);

【问题讨论】:

    标签: sorting compare comparator hashcode


    【解决方案1】:

    这听起来不是一个好方法。 默认 hashCode() 通常通过将对象的内部地址转换为整数来实现。因此对象的顺序在应用程序执行之间会有所不同。 此外,除非您覆盖实现,否则具有相同属性值集的 2 个对象将不会返回相同的 hashCode 值。这实际上违反了 Comparable 的预期合同。

    【讨论】:

    • 那么,您还有什么要建议的吗?
    • stackoverflow.com/questions/9704554/… 除非您实施正确的比较器 - 您的 PriorityQueue 与未排序的集合一样好。只是为了说清楚。使用 hashCode,您将在一个应用程序实例 (JVM) 中获得一致的顺序。这根本不是正确的方法。
    猜你喜欢
    • 1970-01-01
    • 2012-11-24
    • 2011-05-19
    • 2013-11-29
    • 2014-01-11
    • 1970-01-01
    • 2017-12-12
    • 2011-02-18
    • 1970-01-01
    相关资源
    最近更新 更多