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 }
何事都只需坚持..
难?
维熟尔。
LZL的自学历程...只需坚持