zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Unity 5.3 Assetbundle热更资源
    自定义协同程序:CustomYieldInstruction
    C# 温故而知新: 线程篇(四)
    C# 温故而知新: 线程篇(三)
    C# 温故而知新: 线程篇(二)
    c# 温故而知新: 线程篇(一)
    C# 温故而知新:Stream篇(六)
    C# 温故而知新:Stream篇(七)
    C# 温故而知新:Stream篇(四)
    Redis高级数据类型
  • 原文地址:https://www.cnblogs.com/LBJLAKERS/p/12427626.html
Copyright © 2011-2022 走看看