java - 为什么可比性在片场不起作用?

标签 java collections set hashset comparable

这是我的文件

User.java

public class User implements Comparable<User> {

private String name;
private int age;

public User(String name, int age) {
    super();
    this.name = name;
    this.age = age;
}

public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public int getAge() {
    return age;
}
public void setAge(int age) {
    this.age = age;
}

@Override
public String toString() {
    return "User [name=" + name + ", age=" + age + "]";
}
/**
 * Sorting by name
 */
@Override
public int compareTo(User user) {
    return this.name.compareTo(user.name);
}
}

测试.java

public class Test {
public static void main(String[] args) {

    User u1=new User("Shanaya", 22);
    User u2=new User("Jhon", 27);
    User u3=new User("Arya", 20);

    Set<User> set=new HashSet<>();
    set.add(u1);
    set.add(u2);
    set.add(u3);

    System.out.println(set);  //by name sorting not working here
}

Overriden compareTo() is here to compare objects "by names" only Still output of program is "by age" comparison

output: [User [name=Arya, age=20], User [name=Shanaya, age=22], User [name=Jhon, age=27]]

最佳答案

这里的问题是 HashSet 不是 Java 中的有序集,并且它不会使用您的 Comparable 接口(interface)的实现。尝试使用像 TreeSet 这样的有序集来代替:

User u1 = new User("Shanaya", 22);
User u2 = new User("Jhon", 27);
User u3 = new User("Arya", 20);

Set<User> set = new TreeSet<>();
set.add(u1);
set.add(u2);
set.add(u3);

for (User user : set) {
    System.out.println(user);
}

关于java - 为什么可比性在片场不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50672671/

相关文章:

java - 如何使用动态 JLabels 和 JButton 创建新的 JFrame 而不会遇到 NullPointerException?

对具有泛型参数的方法的 Java 方法引用

c# - 分组同类对象 C#

algorithm - 最大集合交集

java - 我们应该遍历 map 吗?为什么?

python - 为什么强制转换 Python 的 map() 函数会改变其效果?

java - 如何设置Jetty的文档根目录?

java - JAVA 中带有 JSON 字符串的 HTTP POST 请求

java - ArrayList 和 HashSet/LinkedHashSet 谁消耗更多内存?

c# - C# 集合是否始终强制执行顺序?