首页 > 解决方案 > compare() 和 compareTo() 方法是否使用哈希码来比较 java 中的字符串或对象?

问题描述

有人告诉我, java 中可比较和比较器接口的compare() 和 compareTo()方法使用哈希码来比较 java 中的字符串或对象。

我没有找到任何相关的证据。

所以主要问题是这两种方法在内部使用什么来比较对象

从理论上讲,我对哈希码的了解是:

Java 对象的哈希码只是一个数字,它是 32 位有符号整数,它允许对象由基于哈希的数据结构管理。我们知道哈希码是JVM分配给一个对象的唯一ID号。但实际上,哈希码并不是一个对象的唯一编号。如果两个对象相等,那么这两个对象应该返回相同的哈希码。所以我们必须实现一个类的 hashcode() 方法,如果两个对象相等,即通过该类的 equal() 方法进行比较,那么这两个对象必须返回相同的哈希码。如果您要覆盖 hashCode ,则还需要覆盖 equals 方法。

标签: java

解决方案


comparecompareTo处理在 Java 中称为自然排序的东西。通常这意味着像在现实世界中那样对事情进行排序:字符串(az字典顺序)、数字从小到大等。有关该主题的更多信息:https ://docs.oracle.com/javase/8/docs/api/java /lang/Comparable.html

你可能听到的——快速而肮脏的 hack 放入MyClass一个TreeMap可以写的人中

class MyClass implements Comparable<MyClass> {
    // ...
    @Override
    public int compareTo(MyClass other) {
        // Dirty hack, don't use!
        return Integer.compare(hashCode(), other.hashCode());
    }
}

虽然这可能有效,但我不建议compareTo()这样写。


推荐阅读