1. TreeSet保证元素唯一性和比较器排序的原理及代码实现(比较器排序)
(1)Student.java:
1 package cn.itcast_07; 2 3 public class Student { 4 private String name; 5 private int age; 6 7 public Student() { 8 super(); 9 } 10 11 public Student(String name, int age) { 12 super(); 13 this.name = name; 14 this.age = age; 15 } 16 17 public String getName() { 18 return name; 19 } 20 21 public void setName(String name) { 22 this.name = name; 23 } 24 25 public int getAge() { 26 return age; 27 } 28 29 public void setAge(int age) { 30 this.age = age; 31 } 32 }
(2)TreeSetDemo.java:
1 package cn.itcast_07; 2 3 import java.util.Comparator; 4 import java.util.TreeSet; 5 6 /* 7 * 需求:请按照姓名的长度排序 8 * 9 * TreeSet集合保证元素排序和唯一性的原理 10 * 唯一性:是根据比较的返回是否是0来决定。 11 * 排序: 12 * A:自然排序(元素具备比较性) 13 * 让元素所属的类实现自然排序接口 Comparable 14 * B:比较器排序(集合具备比较性) 15 * 让集合的构造方法接收一个比较器接口的子类对象 Comparator 16 */ 17 public class TreeSetDemo { 18 public static void main(String[] args) { 19 // 创建集合对象 20 // TreeSet<Student> ts = new TreeSet<Student>(); //自然排序 21 // public TreeSet(Comparator comparator) //比较器排序 22 // TreeSet<Student> ts = new TreeSet<Student>(new MyComparator()); 23 24 // 如果一个方法的参数是接口,那么真正要的是接口的实现类的对象 25 // 而匿名内部类就可以实现这个东西 26 TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() { 27 @Override 28 public int compare(Student s1, Student s2) { 29 // 姓名长度 30 int num = s1.getName().length() - s2.getName().length(); 31 // 姓名内容 32 int num2 = num == 0 ? s1.getName().compareTo(s2.getName()) 33 : num; 34 // 年龄 35 int num3 = num2 == 0 ? s1.getAge() - s2.getAge() : num2; 36 return num3; 37 } 38 }); 39 40 // 创建元素 41 Student s1 = new Student("linqingxia", 27); 42 Student s2 = new Student("zhangguorong", 29); 43 Student s3 = new Student("wanglihong", 23); 44 Student s4 = new Student("linqingxia", 27); 45 Student s5 = new Student("liushishi", 22); 46 Student s6 = new Student("wuqilong", 40); 47 Student s7 = new Student("fengqingy", 22); 48 Student s8 = new Student("linqingxia", 29); 49 50 // 添加元素 51 ts.add(s1); 52 ts.add(s2); 53 ts.add(s3); 54 ts.add(s4); 55 ts.add(s5); 56 ts.add(s6); 57 ts.add(s7); 58 ts.add(s8); 59 60 // 遍历 61 for (Student s : ts) { 62 System.out.println(s.getName() + "---" + s.getAge()); 63 } 64 } 65 }
运行结果如下:
时间: 2024-10-10 06:21:30