Java学习笔记

java 学习笔记之 TreeSet 集合 排序

2016-11-08  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读