I'm a beginner in programming and I have two classes. First class is:
public class User implements Comparable<User>
with field int age
, constructor and overrided method of interface Comparable:
@Override
public int compareTo(User user) {
return user.age >= age ? -1 : 0;
}
Second class is
public class SortUser
with a method to make a Set collection from a List:
public Set<User> sort(List<User> list) {
Set<User> result = new TreeSet<>();
for (User user : list) {
result.add(user);
}
return result;
}
It seems to me that all User
objects in a Set should be sorted, but when I made a List with 3 User
objects...
User a = new User(1);
User b = new User(2);
User c = new User(3);
List<User> list = new ArrayList<>();
list.add(c);
list.add(a);
list.add(b);
(Now the list's order is: 312
)
...and created a Set
(TreeSet
) from that list:
SortUser sortUser = new SortUser();
Set<User> set = sortUser.sort(list);
At the end I have a set
with that order: 13
, it means that only two objects are in the set
. What is going wrong?
As I see you have wrong implementation of compare method. Could you update it to?
@Override
public int compareTo(User user) {
return Integer.compare(age, user.age);
}