首页 > 代码库 > java 17 -7 TreeSet元素排序规则的案例

java 17 -7 TreeSet元素排序规则的案例

 

  TreeSet:能够对元素按照某种规则进行排序。
  排序有两种方式
    A:自然排序
    B:比较器排序

  TreeSet集合的特点:排序和唯一

  通过观察TreeSet的add()方法,我们知道最终要看TreeMap的put()方法。

 1 package zl_TreeSet; 2  3 import java.util.TreeSet; 4 public class TreeSetDemo { 5  6 public static void main(String[] args) { 7 //创建TreeSet集合 8 TreeSet<String> tree = new TreeSet<String>(); 9 10 //添加元素 自然排序11 tree.add("bac");12 tree.add("cba");13 tree.add("a");14 tree.add("u");15 tree.add("bca");16 tree.add("b");17 tree.add("p");18 tree.add("");19 tree.add("F");20 21 //遍历 22 for(String s : tree){23 System.out.println(s);24 // F,a,b,bac,bca,cba,p,u 字符串的话,自然排序是按照ASCII表的顺序,第一位相同,看第二位25 }26 System.out.println("---------");27 28 TreeSet<Integer> tree1 = new TreeSet<Integer>();29 30 tree1.add(14);31 tree1.add(34);32 tree1.add(41);33 tree1.add(16);34 tree1.add(23);35 tree1.add(45);36 tree1.add(41);37 tree1.add(23);38 39 for(Integer i : tree1){40 System.out.println(i);41 //int类型直接按照数字顺序排序42 }43 44 }45 46 }

 

 

  用StreeSet集合存储自定义对象并遍历。

  如果一个类的元素要想能够进行自然排序,就必须实现自然排序接口

  创建TreeSet集合,添加动物对象,按照以下规则进行排序:
    品种名字长度短的在前面

  因为只有一个主要的条件,而如果就根据这个写自然排序的话,那么长度一样的对象,只会添加进去一个
  所以,要增加次要条件:
    a:长度一样的,判断动物的颜色是否一样
    b:前两者一样,再判断年龄是否一样
  以上都是自然排序

 

首先看对象类:

 1 package zl_TreeSet; 2  3 public class Animal implements Comparable<Animal>{ 4      5     private String name; 6     private String color; 7     private int age; 8     public Animal() { 9         super();10         // TODO Auto-generated constructor stub11     }12     public Animal(String name, String color, int age) {13         super();14         this.name = name;15         this.color = color;16         this.age = age;17     }18     public String getName() {19         return name;20     }21     public void setName(String name) {22         this.name = name;23     }24     public String getColor() {25         return color;26     }27     public void setColor(String color) {28         this.color = color;29     }30     public int getAge() {31         return age;32     }33     public void setAge(int age) {34         this.age = age;35     }36     /*37           A:品种名字长度短的在前面38      39          因为只有一个主要的条件,而如果就根据这个写自然排序的话,那么长度一样的对象,只会添加进去一个40          所以,要增加次要条件:41          a:长度一样的,判断动物的颜色是否一样42          b:前两者一样,再判断年龄是否一样43      */44     public int compareTo(Animal a) {45         46         //品种名字长度短的在前面47         int num = this.name.length() - a.name.length();48         49         //长度相同了,要看名字的内容是否相同50         int num2 = num == 0 ? this.name.compareTo(a.name):num;51         52         //长度和内容都相等了,并不代表颜色相同53         int num3 = num2 == 0 ? this.color.compareTo(a.color) : num2;54         55         //上面都相同了,不代表年龄相同56         int num4 = num3 == 0? this.age - a.age : num3;57         58         //得到最终的排序结论59         return num4 ;60         61     }62     63     64 }

 

测试类:

 

 1 package zl_TreeSet; 2  3 public class Animal implements Comparable<Animal>{ 4      5     private String name; 6     private String color; 7     private int age; 8     public Animal() { 9         super();10         // TODO Auto-generated constructor stub11     }12     public Animal(String name, String color, int age) {13         super();14         this.name = name;15         this.color = color;16         this.age = age;17     }18     public String getName() {19         return name;20     }21     public void setName(String name) {22         this.name = name;23     }24     public String getColor() {25         return color;26     }27     public void setColor(String color) {28         this.color = color;29     }30     public int getAge() {31         return age;32     }33     public void setAge(int age) {34         this.age = age;35     }36     /*37           A:品种名字长度短的在前面38      39          因为只有一个主要的条件,而如果就根据这个写自然排序的话,那么长度一样的对象,只会添加进去一个40          所以,要增加次要条件:41          a:长度一样的,判断动物的颜色是否一样42          b:前两者一样,再判断年龄是否一样43      */44     public int compareTo(Animal a) {45         46         //品种名字长度短的在前面47         int num = this.name.length() - a.name.length();48         49         //长度相同了,要看名字的内容是否相同50         int num2 = num == 0 ? this.name.compareTo(a.name):num;51         52         //长度和内容都相等了,并不代表颜色相同53         int num3 = num2 == 0 ? this.color.compareTo(a.color) : num2;54         55         //上面都相同了,不代表年龄相同56         int num4 = num3 == 0? this.age - a.age : num3;57         58         //得到最终的排序结论59         return num4 ;60         61     }62     63     64     65 }

 

java 17 -7 TreeSet元素排序规则的案例