簡體   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