У меня есть пользовательский класс с именем User. Этот класс реализует сопоставимые и имеет идентификационный номер поля данных, подписчиков и следующие.
Я хочу отсортировать элементы TreeSet таким образом, чтобы пользователь с наибольшим количеством подписчиков был первым, а пользователь с наименьшим количеством подписчиков - последним. Если у обоих пользователей одинаковое количество подписчиков, сортируйте их по количеству подписчиков. Если они следуют одному и тому же количеству людей, сортируйте их по идентификационному номеру.
class User implements Comparable<User>
{
private int userId;
private ArrayList<User> following;
private ArrayList<User> followers;
Set<User> sortingSet = new TreeSet<User>();
}
Я также реализовал метод сравнения
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, он просто сортируется на основе идентификатора пользователя.
РЕДАКТИРОВАТЬ: Спасибо за помощь, я сделал некоторые изменения в коде до сих пор. Я удалил некоторые лишние операторы if. Я также реализовал метод CompareTo, но проблема остается той же. Я также уже написал методы equals () и hashcode ().
EDIT2: Еще раз спасибо всем за помощь. Я выяснил проблему, и это связано с тем, как я инициализировал подписчиков и следовал за ArrayLists. Я обвиняю эту ошибку в недостатке сна.