TreeSet的排序

TreeSet的的排序使用

TreeSet的两种排序方式:

  • 自然排序
  • 比较器排序

自然排序

  • 新建一个实体类,注意这个实体类要实现接口  Comparable 。见代码详解:
 1 package zh.stu.sort.TreeSetTest;
 2 
 3 public class Person implements Comparable<Person>{
 4     
 5     private  String uname;
 6     
 7     private int age;
 8     
 9     public Person(){
10         super();
11     }
12     
13     public Person(String uname, int age) {
14         super();
15         this.uname = uname;
16         this.age = age;
17     }
18     
19     public String getUname() {
20         return uname;
21     }
22     
23     public void setUname(String uname) {
24         this.uname = uname;
25     }
26     
27     public int getAge() {
28         return age;
29     }
30     
31     public void setAge(int age) {
32         this.age = age;
33     }
34     
35     public int compareTo(Person p) {
36         // return -1   -1 表示放在红黑树的左边,就是逆序输出
37         // return 1     1 表示放在红黑树的右边,就是顺序输出
38         // return 0     0 表示元素相同,仅存放第一个元素
39         
40         // 主要条件 姓名的长度 ,如果姓名长度小的那么就放在左子树,否则放在右子树
41         int num=this.uname.length()- p.uname.length();
42         
43         // 此时姓名的长度相同,不代表姓名相同。
44         // 如果按照字典顺序比,string  对象位于参数字符串之前,那么比较结果是一个负整数
45         // 如果按照字典顺序比, string 对象位于参数字符串之后,那么比较结果为一个正整数
46         // 如果两个字符串相等,那么返回0
47         int num1= num ==0 ? this.uname.compareTo(p.uname) : num;
48         // 内容相同,年龄不一定相同。在按照年龄排序
49         int num2 = num1==0 ? this.age-p.age : num1;
50         return num2;
51     }
52 }
  • 做排序测试
     1 package zh.stu.sort.TreeSetTest;
     2 
     3 import java.util.TreeSet;
     4 
     5 public class SortTest {
     6     
     7     public static void main(String[] args) {
     8         // 自然排序
     9         TreeSet<Person> treeSet = new TreeSet<Person>();
    10         // 在使用的是汉字排序的时候
    11         Person p=new Person("詹姆斯",18);
    12         Person p1=new Person("艾弗森",20);
    13         Person p2=new Person("科比",20);
    14         Person p3=new Person("乔丹",22);
    15         Person p4=new Person("戴维斯",12);
    16         treeSet.add(p);
    17         treeSet.add(p1);
    18         treeSet.add(p2);
    19         treeSet.add(p3);
    20         treeSet.add(p4);
    21         for (Person person : treeSet) {
    22             System.out.println(person.getUname() +"----"+ person.getAge());
    23         }
    24     }
    25 }

     

  • 在控制台输出结果
    乔丹----22
    科比----20
    戴维斯----12
    艾弗森----20
    詹姆斯----18

比较器排序

  • 新建一个实体类
    package zh.stu.sort.TreeSetTest.TheComparator;
    
    public class User {
        
        private String name;
        
        private int age;
        
        public User(){
            super();
        }
        
        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;
        }
    }
  • 新加一个比较器,但是要实现接口Comparator
     1 package zh.stu.sort.TreeSetTest.TheComparator;
     2 
     3 import java.util.Comparator;
     4 
     5 // 实现接口Comparator
     6 public class MyComparator implements Comparator<User> {
     7     
     8     public int compare(User o1, User o2) {
     9         
    10         int num=o1.getName().length()-o2.getName().length();
    11         
    12         int num1= num == 0 ? o1.getName().compareTo(o2.getName()) : num;
    13         
    14         int num2 = num1 == 0? o1.getAge() - o2.getAge() : num1;
    15         
    16         return num2;
    17     }
    18 }
  • 最后在类中做测试
     1 package zh.stu.sort.TreeSetTest.TheComparator;
     2 
     3 import java.util.Comparator;
     4 import java.util.TreeSet;
     5 
     6 public class Test {
     7     
     8     public static void main(String[] args) {
     9         TreeSet<User> users = new TreeSet<User>(new MyComparator());
    10     
    11         User user =new User("乔丹",22);
    12         User user1 =new User("艾弗森",24);
    13         User user2 =new User("乔丹",21);
    14         User user3 =new User("Zion",62);
    15         User user4 =new User("欧文",22);
    16         
    17         users.add(user);
    18         users.add(user1);
    19         users.add(user2);
    20         users.add(user3);
    21         users.add(user4);
    22     
    23         for (User user5 : users) {
    24             System.out.println(user5.getName() +"===="+ user5.getAge() );
    25         }
    26     }
    27 }

    在控制台输出的结果为

    乔丹====21
    乔丹====22
    欧文====22
    艾弗森====24
    Zion====62

     

 

posted @ 2020-04-03 17:04  白天黑天阴天  阅读(479)  评论(0编辑  收藏  举报