У меня есть пользовательский класс с именем User. Этот класс реализует сопоставимые и имеет поля данных с идентификатором, подписчиками и подписчиками.
Я хочу отсортировать элементы в TreeSet так, чтобы пользователь с наибольшим количеством подписчиков был первым, а пользователь с наименьшим количеством подписчиков - последним. Если у обоих Пользователей одинаковое количество фолловеров, сортируйте по тому, сколько людей фолловит Пользователь. Если они подписаны на одно и то же количество людей, сортируйте их по идентификационному номеру.
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, он просто сортируется на основе идентификатора пользователя.
РЕДАКТИРОВАТЬ: Спасибо за помощь, я внес некоторые изменения в код. Я удалил некоторые лишние операторы if. Я также реализовал метод compareTo, но проблема осталась прежней. Я также уже написал методы equals() и hashcode().
EDIT2: Еще раз всем спасибо за помощь. Я понял проблему, и она связана с тем, как я инициализировал последователей и следил за ArrayLists. Я виню в этой ошибке недостаток сна.
if
лишний. - person steffen   schedule 03.05.2019Comp
или любой другойComparator
, потому что вы можете реализовать логику сравнения в методеcompareTo
методаUser
, который должен реализовать его, потому что онimplements Comparable<User>
. Добавьте правильныеequals
иhashCode
кUser
, иTreeSet
отсортирует их соответствующим образом. - person deHaar   schedule 03.05.2019int cmpFollowers = Integer.compare(other.followers.size(), this.followers.size()); if (cmpFollowers != 0) return cmpFollowers;
- person Andy Turner   schedule 03.05.2019User
есть такойTreeSet
. Кроме того, вы должны понимать, что свойства не должны изменяться после добавления объекта вTreeSet
. - person Holger   schedule 06.05.2019