美文网首页Java学习笔记
java 学习笔记之 TreeSet 集合 排序

java 学习笔记之 TreeSet 集合 排序

作者: 红姑娘 | 来源:发表于2016-11-08 13:50 被阅读14次

    创建一个Student对象 含有name, age属性
    按照name的长度排序 长度相等按照姓名的大小排序 大小相等 按照age的大小排序

    方法一:

    //创建Student的类  实现 Comparable 接口并且重载compareTo方法 
    
     public class Student implements Comparable<Student> {
     
      private String name;        
      private int 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;
    }
    public Student() {
        super();
        // TODO Auto-generated constructor stub
    }
    
    public Student(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    
    @Override
    public String toString() {
        return "Student [name=" + name + ", age=" + age + "]";
    }
    
    @Override
    public int compareTo(Student s) {
        // TODO Auto-generated method stub
        
        //按照姓名的长度进行排序  
        int num = this.name.length() -  s.name.length();
        //长度相同 按照姓名大小排序
        int num2 = num == 0 ? this.name.compareTo(s.name) : num;
        //长度和姓名都相等 按照大小排序
        int num3 = num2 == 0 ? this.age - s.age : num2;
        return num3;
    }
    
    
    //在main实现
    public static void main(String[] args) {
        
        TreeSet<Student> set = new TreeSet<Student>();
    
        Student stu1 = new Student("zhangwuji",35);
        Student stu2 = new Student("zhaomin",28);
        Student stu3 = new Student("zhouzhiruo",30);
        Student stu4 = new Student("xiexun",50);
        Student stu5 = new Student("meijueshitai",48);
        Student stu6 = new Student("zhangsanfeng",88);
        Student stu7 = new Student("zhaomin",28);
        Student stu8 = new Student("zhouzhiruo",20);
        
        set.add(stu1);
        set.add(stu2);
        set.add(stu3);
        set.add(stu4);
        set.add(stu5);
        set.add(stu6);
        set.add(stu7);
        set.add(stu8);
    
        for(Student student : set){
            System.out.println(student.toString());
        }
    }
    

    方法二:

    //创建一个MyCompartor的类  实现 Comparator 接口并且重载compare方法
     public class MyCompartor implements Comparator<Student> {
        @Override
        public int compare(Student o1, Student o2) {
    
        //按照姓名的长度进行排序  
        int num = o1.getName().length() -  o2.getName().length();
        //长度相同 按照姓名大小排序
        int num2 = num == 0 ? o1.getName().compareTo(o2.getName()) : num;
        //长度和姓名都相等 按照大小排序
        int num3 = num2 == 0 ? o1.getAge() - o2.getAge() : num2;
        return num3;
        }
    }
    //创建Student类
    public class Student{
    
        private String name;
    private int 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;
    }
    public Student() {
        super();
        // TODO Auto-generated constructor stub
    }
    
    public Student(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    
    @Override
    public String toString() {
        return "Student [name=" + name + ", age=" + age + "]";
        }
    }
    
    //main 实现
    public static void main(String[] args) {
        
        Comparator<Student>  com = new MyCompartor(); 
        TreeSet<Student> set = new TreeSet<Student>(com);
    
        Student stu1 = new Student("zhangwuji",35);
        Student stu2 = new Student("zhaomin",28);
        Student stu3 = new Student("zhouzhiruo",30);
        Student stu4 = new Student("xiexun",50);
        Student stu5 = new Student("meijueshitai",48);
        Student stu6 = new Student("zhangsanfeng",88);
        Student stu7 = new Student("zhaomin",28);
        Student stu8 = new Student("zhouzhiruo",20);
        
        set.add(stu1);
        set.add(stu2);
        set.add(stu3);
        set.add(stu4);
        set.add(stu5);
        set.add(stu6);
        set.add(stu7);
        set.add(stu8);
    
        for(Student student : set){
            System.out.println(student.toString());
        }
    }
    

    方法三:

      //和方法二一样创建Student类 此处省略
     //直接在main函数排序
      public static void main(String[] args) {
        TreeSet<Student> set = new TreeSet<>(new Comparator<Student>() {
    
            @Override
            public int compare(Student o1, Student o2) {
                // TODO Auto-generated method stub
                //按照姓名的长度进行排序  
                int num = o1.getName().length() -  o2.getName().length();
                //长度相同 按照姓名大小排序
                int num2 = num == 0 ? o1.getName().compareTo(o2.getName()) : num;
                //长度和姓名都相等 按照大小排序
                int num3 = num2 == 0 ? o1.getAge() - o2.getAge() : num2;
                
                return num3;
            }
            
        });
        
        Student stu1 = new Student("zhangwuji",35);
        Student stu2 = new Student("zhaomin",28);
        Student stu3 = new Student("zhouzhiruo",30);
        Student stu4 = new Student("xiexun",50);
        Student stu5 = new Student("meijueshitai",48);
        Student stu6 = new Student("zhangsanfeng",88);
        Student stu7 = new Student("zhaomin",28);
        Student stu8 = new Student("zhouzhiruo",20);
        
        set.add(stu1);
        set.add(stu2);
        set.add(stu3);
        set.add(stu4);
        set.add(stu5);
        set.add(stu6);
        set.add(stu7);
        set.add(stu8);
    
        for(Student student : set){
            System.out.println(student.toString());
        }
    }
    

    控制台结果均如下:

    屏幕快照 2016-11-08 13.59.55.png

    相关文章

      网友评论

        本文标题:java 学习笔记之 TreeSet 集合 排序

        本文链接:https://www.haomeiwen.com/subject/xlvauttx.html