Java 为什么不在片场工作?

Java 为什么不在片场工作?,java,collections,set,hashset,comparable,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; }

这是我的档案

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);
}
}
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
}
公共类用户实现可比较{
私有字符串名称;
私人互联网;
公共用户(字符串名称,整数){
超级();
this.name=名称;
这个。年龄=年龄;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共整数getAge(){
回归年龄;
}
公共无效设置(整数){
这个。年龄=年龄;
}
@凌驾
公共字符串toString(){
返回“User[name=“+name+”,age=“+age+”]”;
}
/**
*按名称排序
*/
@凌驾
公共整数比较(用户){
返回此.name.compareTo(user.name);
}
}
Test.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);
}
}
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
}
公共类测试{
公共静态void main(字符串[]args){
用户u1=新用户(“Shanaya”,22);
用户u2=新用户(“Jhon”,27);
用户u3=新用户(“Arya”,20);
Set=newhashset();
添加(u1);
添加(u2);
添加(u3);
System.out.println(set);//按名称排序在这里不起作用
}
这里重写的compareTo()用于“按名称”比较对象,但程序的输出仍然是“按年龄”比较

输出:[用户[name=Arya,年龄=20],用户[name=Shanaya,年龄=22],用户 [姓名=Jhon,年龄=27]]


这里的问题是,
HashSet
在Java中不是一个有序集,它不会利用您对
Comparable
接口的实现。请尝试使用像
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);
}
User u1=新用户(“Shanaya”,22);
用户u2=新用户(“Jhon”,27);
用户u3=新用户(“Arya”,20);
Set=新树集();
添加(u1);
添加(u2);
添加(u3);
用于(用户:设置){
System.out.println(用户);
}

这里的问题是,
哈希集
在Java中不是一个有序集,它不会利用您对
可比
接口的实现。请尝试使用像
树集这样的有序集

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);
}
User u1=新用户(“Shanaya”,22);
用户u2=新用户(“Jhon”,27);
用户u3=新用户(“Arya”,20);
Set=新树集();
添加(u1);
添加(u2);
添加(u3);
用于(用户:设置){
System.out.println(用户);
}

无法保证将对
哈希集中的项进行排序,您需要显式地对它们进行排序。注意:如果实现compareTo(),则还应实现hashCode()和equals(),这可能是重复的因此,
HashSet
中的项不能保证会被排序,您需要显式地对它们进行排序。注意,如果您实现compareTo(),您也应该相应地实现hashCode()和equals()。