繁体   English   中英

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

[英]Creating New Comparator for TreeSet in Java

我有一个名为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的方式有关。 我将此失误归咎于我的睡眠不足。

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

比较比较两件东西的东西 比较能力是可以将自己与事物进行比较的事物。

Comparable.compareTo接受一个参数。 Comparator.compare具有两个参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM