java 学习笔记之 TreeSet 集合 排序

创建一个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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,490评论 18 399
  • 一. Java基础部分.................................................
    wy_sure阅读 9,284评论 0 11
  • 什么是SQLite?数据库存储数据的步骤 ●SQLite是一款轻型的嵌入式数据库,它占用资源非常的低,在嵌入式设备...
    飞行的猫阅读 7,280评论 1 7
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 4,793评论 0 4
  • 图文/刘懒懒 除去天分不谈 你的天真无邪 是谁在成全? 去刷了心心念念的《至爱梵高》,而电影整个下来,让我记忆深...
    少女哪吒刘懒懒阅读 1,310评论 0 1

友情链接更多精彩内容