【问题标题】:Sorting objects with the same hashcode in java在java中对具有相同哈希码的对象进行排序
【发布时间】:2020-01-29 18:32:48
【问题描述】:

例如,如果我正在对整数进行哈希处理,而我的哈希函数只是 (n % 10),那么数字 17 和数字 27 将产生相同的结果。这并不意味着这些数字是相同的。

现在,假设 n%10 是我的散列函数,我的问题是: 如果我按以下顺序输入以下数字,由于它们是按其哈希码排序的,这些数字将如何输出?

数字:10、27、17、38、58、28、43

【问题讨论】:

  • 何不试一试?
  • 为什么要按哈希码对整数进行排序?
  • 10, 43, [27, 17], [38, 58, 28] 其中方括号中的数字可以互换位置,具体取决于排序算法的实现细节以及列表中的原始位置
  • @C.B.不完全的。相等的对象必须返回相同的哈希码,但不同的对象也可以返回相同的哈希码。不管你的哈希算法有多好,哈希冲突都是一回事。
  • 我很困惑。您是在问java如何对对象进行排序?当其中两个具有相同的哈希码时会发生什么?

标签: java hashcode


【解决方案1】:

我想你可能对 hashCode() 在 Java 中的用途感到困惑。

排序一般不依赖equals()hashCode()。它们用于识别平等。例如HashSet 将使用这两种方法来识别相等性。 TreeSet 也使用这两种方法来识别相等性,但它们不用于对元素进行排序。

排序需要一种比较对象的方法,为此(仅考虑 Java SE),要么要求类实现 Comparable 并因此具有 compareTo(Object o) 方法,要么提供 Comparator 用于排序算法。

因此,假设您使用 Java SE 中的方法对整数进行排序,例如 Arrays.sort(),则不会考虑 hashCode,您的整数将根据类的 compareTo() 或提供的Comparator.

【讨论】:

    猜你喜欢
    • 2012-03-31
    • 2011-09-23
    • 2013-04-30
    • 2011-07-23
    • 1970-01-01
    相关资源
    最近更新 更多