如何覆盖 compareTo (Java)

新手上路,请多包涵

我是编程的初学者,我有两个班级。第一类是:

 public class User implements Comparable<User>

带有字段 int age ,接口 Comparable 的构造函数和重写方法:

  @Override
    public int compareTo(User user) {
        return user.age >= age ? -1 : 0;
    }

第二类是 public class SortUser 具有从列表创建集合的方法:

 public Set<User> sort(List<User> list) {
        Set<User> result = new TreeSet<>();
        for (User user : list) {
            result.add(user);
        }
        return result;
    }

在我看来,应该对 Set 中的所有 User 对象进行排序,但是当我用 3 User 对象创建一个列表时……

  User a = new User(1);
 User b = new User(2);
 User c = new User(3);
 List<User> list = new ArrayList<>();
 list.add(c);
 list.add(a);
 list.add(b);

(现在列表的顺序是: 312 )…并从该列表中创建了一个 SetTreeSet

 SortUser sortUser = new SortUser();
Set<User> set = sortUser.sort(list);

最后我有一个 set 这个命令: 13 ,这意味着只有两个对象在 set 出了什么问题?

原文由 aLittleMind 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 433
2 个回答

如我所见,您对比较方法的实现有误。你能把它更新到吗?

 @Override
public int compareTo(User user) {
  return Integer.compare(age, user.age);
}

原文由 Roma Khomyshyn 发布,翻译遵循 CC BY-SA 3.0 许可协议

请遵循以下方法

在字符串的情况下。

     public static Comparator<Employee> NameComparator = new Comparator<Employee>() {
    @Override
    public int compare(Employee e1, Employee e2) {
        return e1.getName().compareTo(e2.getName());
    }
};

如果是整数值

public static Comparator<Employee> SalaryComparator = new Comparator<Employee>() {

    @Override
    public int compare(Employee e1, Employee e2) {
        return (int) (e1.getSalary() - e2.getSalary());
    }
};

原文由 Lova Chittumuri 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题