在Java中为TreeSet创建新的比较器

时间:2019-05-03 11:13:13

标签: java comparator compareto treeset

我有一个名为User的用户定义类。此类实现可比较的类,并具有数据字段ID号,关注者和关注者。

我想对TreeSet中的元素进行排序,以使关注者最多的用户排在第一位,关注者最少的用户排在最后。如果两个用户的关注者数量相同,则根据该用户关注的人数进行排序。如果他们跟随的人数相同,则根据ID号进行排序。

class User implements Comparable<User>
{
    private int userId;
    private ArrayList<User> following;
    private ArrayList<User> followers;
    Set<User> sortingSet = new TreeSet<User>();
}

我还实现了compareTo方法

public int compareTo(User other)
{
    if(this.followers.size() > other.followers.size())
        return -1;

    if(this.followers.size() < other.followers.size())
        return 1;

    if(this.following.size() > other.following.size())
        return -1;

    if(this.following.size() < other.following.size())
        return 1;

    if(this.userId < other.userId)
        return -1;

    if(this.userId > other.userId)
        return 1;

    return 0;
}

当我添加到TreeSet时,它只是根据userId进行排序。

编辑:感谢您的帮助,到目前为止,我已经对代码进行了一些更改。我删除了一些多余的if语句。我还实现了compareTo方法,但问题仍然存在。我还已经编写了equals()和hashcode()方法。

EDIT2:再次感谢大家的帮助。我已经解决了这个问题,这与初始化跟随者和跟随ArrayLists的方式有关。我将此失误归咎于我的睡眠不足。

1 个答案:

答案 0 :(得分:1)

您尚未创建比较器。您已经创建了一个名为Comp的东西,可以与用户进行比较。

比较器是比较两件事的事物。可比较的是可以将自己比较的东西。

Comparable.compareTo接受一个论点。 Comparator.compare接受两个参数。