【发布时间】:2021-04-15 17:39:21
【问题描述】:
类 People 实现 Comparable {
private String name;
People(String name){
this.name=name;
}
@Override
public int compareTo(Object o) {
// TODO Auto-generated method stub
return 0;
}
@Override
public String toString() {
return "People [name=" + name + "]";
}
}
公共类 TestTreeSet {
public static void main(String[] args) {
Set<People> set=new TreeSet<>();
People p1=new People("ABC");
People p2=new People("DEF");
People p3=new People("CBD");
People p4=new People("ABC");
set.add(p1);
set.add(p2);
set.add(p3);
set.add(p4);
System.out.print(set.size());
}
}
我无法理解输出为 1 的原因?在这里,我存储了 4 个具有 3 个不同值的不同对象。 它是如何只存储一个对象的?
【问题讨论】:
-
因为你的 compareTo 总是返回 0 它认为所有人都是平等的。由于 TreeSet 是唯一且已排序的,因此它会忽略后续添加。
-
你的
compareTo方法总是返回零,这意味着,这种类型的所有对象都是相等的。由于集合不存储重复项,因此它不能有多个始终相等的对象。 -
compareTo总是返回 0,表示所有对象都相等,所以 size 为 1 -
你必须实际实现 compareTo 方法。通过始终返回 0,此类的每个实例都等于另一个。只需将 this 的“名称”与 o 的“名称”进行比较并返回值。
-
您还会收到大量警告,您应该注意它们。
标签: java collections java-8