java 比较函数的工作原理

java how compare function works

我试图通过允许同一个对象出现两次来打破集合规则(只是为了好玩)

这是我的代码:

class Person implements Comparable<Person> {
    public String firstName;

    public Person(String firstName) {
        this.firstName = firstName;
    }

    @Override
    public int compareTo(Person o) {
        return 4;
    }
}

class customTreeSet<T extends Person> extends TreeSet<T> {

    private static final long serialVersionUID = 1L;

}

我这样称呼它:

Set<Person> set = new customTreeSet<Person>();
        set.add(new Person("Forza"));
        set.add(new Person("Forza"));
        for (Person person : set) {
            System.out.println(person.firstName);
        }

我面临的是,当我将 return 保留为 4 时,我的集合包含两个对象,但是当我将其更改为 zero 时,我的集合包含一个对象。

我需要特别了解 returning 类型的规则,它是整数而不是布尔值,如果是布尔值,我会说 true 表示两个对象相同,false 表示不同,但是这是一个整数值,不是布尔值。

感谢您的帮助

Comparable接口用于比较两个对象及其顺序。 As per the JavadocscompareTo 方法应该return 0 如果两个对象相等,任何负数如果this 对象比指定的"smaller" other 和任何正数,如果 this 对象比指定的 other "larger"。 "smaller" 和 "larger" 的含义完全取决于您要建模的内容 - 例如,对于字符串,"greater than" 和 "less than" 指的是它们的字母顺序,而对于整数指的是它们的自然顺序。

在你的例子中,通过总是 returning 4,你声称 1) 对象不相等,并且 2) 两个对象都比另一个大(这不这在语义上确实没有意义,但如果它对你有用,无论如何)。