首页 > 代码库 > java 17 - 8 TressSet比较器排序元素

java 17 - 8 TressSet比较器排序元素

 1 package zl_TreeSet; 2  3 import java.util.Comparator; 4 import java.util.TreeSet; 5  6 /* 7  用StreeSet集合存储自定义对象并遍历。这次用比较器排序 8  public TreeSet(Comparator comparator) 比较器排序 9  这种方法有两种做法:10  1:创建一个把Comparator为接口的类,11  2:如果一个方法的参数是接口,那么真正要的是接口的实现类的对象12  而匿名内部类就可以实现这个东西13 14  (  new 类名或者接口名(){15  重写方法;16  }  );17 18  创建TreeSet集合,添加动物对象,按照以下规则进行排序:19  品种名字长度短的在前面20  */21 public class TreeSetDemo2 {22 23     public static void main(String[] args) {24         // public TreeSet(Comparator comparator) 比较器排序25         // 方式1:创建一个把Comparator为接口的类,然后进行创建26         // TreeSet<Person> ts = new TreeSet<Person>(new MyComparator());27 28         // 方式2:内部匿名类29         TreeSet<Person> ts = new TreeSet<Person>(new Comparator<Person>() {30             public int compare(Person a1, Person a2) {31 32                 // 对比名字长度33                 int num1 = a1.getName().length() - a2.getName().length();34 35                 // 长度相同,则再对比名字内容36                 int num2 = num1 == 0 ? a1.getName().compareTo(a2.getName())37                         : num1;38 39                 // 名字完全一样,再进行省份长度判断40                 int num3 = num2 == 0 ? a1.getState().length()41                         - a2.getState().length() : num2;42 43                 // 省份长度也一样,再进行内容比较44                 int num4 = num3 == 0 ? a1.getState().compareTo(a2.getState())45                         : num3;46 47                 // 上面都一样,就进行年龄比较48                 int num5 = num4 == 0 ? a1.getAge() - a2.getAge() : num4;49 50                 return num5;51             }52         });53 54         // 创建自定义对象55         Person p1 = new Person("熊大", "东北", 21);56         Person p2 = new Person("熊二", "四川", 17);57         Person p3 = new Person("熊大", "福建", 21);58         Person p4 = new Person("熊大", "福建", 20);59         Person p5 = new Person("熊二", "广东", 17);60         Person p6 = new Person("熊大", "东北", 21);61         Person p7 = new Person("熊大", "福建", 21);62 63         // 添加进集合64         ts.add(p1);65         ts.add(p2);66         ts.add(p3);67         ts.add(p4);68         ts.add(p5);69         ts.add(p6);70         ts.add(p7);71 72         // 进行遍历73         for (Person p : ts) {74             System.out.println(p.getName() + "\t" + p.getState() + "\t"75                     + p.getAge());76         }77 78     }79 80 }

 

java 17 - 8 TressSet比较器排序元素