teamojiao
teamojiao
2009-06-04 22:37

关于集合类运用Comparator排序的问题!

  • 企业应用
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;


class User {
    
    private String name;
    private String age;
    private String grade;
    public User(String name, String age, String grade) {
        super();
        this.name = name;
        this.age = age;
        this.grade = grade;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public String getGrade() {
        return grade;
    }
    public void setGrade(String grade) {
        this.grade = grade;
    }
    
    public String toString(){
        return name+"["+age+"] :"+grade;
    }
    
    public static void main(String[] args) {
        Set users=new TreeSet(new Comparator(){
            public int compare(Object o1, Object o2) {
                User user1=(User)o1;
                User user2=(User)o2;
                if(user1.getName().equals(user2.getName())&&user1.getAge().equals(user2.getAge())){
                    return 0;
                }
                int flag=user1.getGrade().compareTo(user2.getGrade());
                if(flag==0){
                    flag=user1.getName().compareTo(user2.getName());
                    if(flag==0){
                        return user1.getAge().compareTo(user2.getAge());
                    }
                }
                return flag;
            }
        });
        
        users.add(new User("billx","23","90"));
        users.add(new User("bill","23","180"));
        users.add(new User("are","23","200"));
        
        System.out.println(users);
    }
}

 上面代码执行的结果是:[bill[23] :180, are[23] :200, billx[23] :90]

可是我期望的结果是:[billx[23] :90,bill[23] :180, are[23] :200 ]

题目的需求是依据用户信息排序如果用户名和年龄相同认为是同一用户,集合内用户不重复,按照成绩,姓名,年龄升序排列答应出用户信息!

请问我上面哪边错了 ,应该怎么写????

 


问题补充:
我没有注意注意类型无语了,请问如果是从一个大的文本文件中获取用户信息需要如何改动才能够提高性能!!!
问题补充:
这个问题并没有结束,因为我在测试的时候,有时用户名和年龄相等时,任然会显示出来,我想说的是User对象是不是还要overload hashcode和equals方法呢,不然光用户名和年龄相等时并不会认为是同一个用户!~!!
  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

3条回答

为你推荐