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 Javadocs,compareTo
方法应该return 0
如果两个对象相等,任何负数如果this
对象比指定的"smaller" other 和任何正数,如果 this
对象比指定的 other "larger"。 "smaller" 和 "larger" 的含义完全取决于您要建模的内容 - 例如,对于字符串,"greater than" 和 "less than" 指的是它们的字母顺序,而对于整数指的是它们的自然顺序。
在你的例子中,通过总是 returning 4
,你声称 1) 对象不相等,并且 2) 两个对象都比另一个大(这不这在语义上确实没有意义,但如果它对你有用,无论如何)。
我试图通过允许同一个对象出现两次来打破集合规则(只是为了好玩)
这是我的代码:
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 Javadocs,compareTo
方法应该return 0
如果两个对象相等,任何负数如果this
对象比指定的"smaller" other 和任何正数,如果 this
对象比指定的 other "larger"。 "smaller" 和 "larger" 的含义完全取决于您要建模的内容 - 例如,对于字符串,"greater than" 和 "less than" 指的是它们的字母顺序,而对于整数指的是它们的自然顺序。
在你的例子中,通过总是 returning 4
,你声称 1) 对象不相等,并且 2) 两个对象都比另一个大(这不这在语义上确实没有意义,但如果它对你有用,无论如何)。