自己编写比较器

来源:互联网 发布:合肥seo 编辑:程序博客网 时间:2024/06/07 02:36

Student.java

public class Student {private String name;private int age;public Student() {super();}public Student(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;}}

MyComparator.java

import java.util.Comparator;public class MyComparator implements Comparator<Student> {@Overridepublic int compare(Student s1, Student s2) {// int num = this.name.length() - s.name.length();// this -- s1// s -- s2// 姓名长度int num = s1.getName().length() - s2.getName().length();// 姓名内容int num2 = num == 0 ? s1.getName().compareTo(s2.getName()) : num;// 年龄int num3 = num2 == 0 ? s1.getAge() - s2.getAge() : num2;return num3;}}class Comparators implements Comparator<Student>{@Overridepublic int compare(Student o1, Student o2) {// TODO Auto-generated method stubint num=o1.getName().length()-o2.getName().length();int num2=num==0?o1.getName().compareTo(o2.getName()):num;int num3=num2==0?o1.getAge()-o2.getAge():num2;return num3;}}


TreeSetDemo.java

import java.util.Comparator;import java.util.TreeSet;/* * 需求:请按照姓名的长度排序 *  * TreeSet集合保证元素排序和唯一性的原理 * 唯一性:是根据比较的返回是否是0来决定。 * 排序: * A:自然排序(元素具备比较性) * 让元素所属的类实现自然排序接口 Comparable * B:比较器排序(集合具备比较性) * 让集合的构造方法接收一个比较器接口的子类对象 Comparator */public class TreeSetDemo {public static void main(String[] args) {// 创建集合对象// TreeSet<Student> ts = new TreeSet<Student>(); //自然排序// public TreeSet(Comparator comparator) //比较器排序// TreeSet<Student> ts = new TreeSet<Student>(new MyComparator());// 如果一个方法的参数是接口,那么真正要的是接口的实现类的对象// 而匿名内部类就可以实现这个东西TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() {@Overridepublic int compare(Student s1, Student s2) {// 姓名长度int num = s1.getName().length() - s2.getName().length();// 姓名内容int num2 = num == 0 ? s1.getName().compareTo(s2.getName()): num;// 年龄int num3 = num2 == 0 ? s1.getAge() - s2.getAge() : num2;return num3;}});// 创建元素Student s1 = new Student("linqingxia", 27);Student s2 = new Student("zhangguorong", 29);Student s3 = new Student("wanglihong", 23);Student s4 = new Student("linqingxia", 27);Student s5 = new Student("liushishi", 22);Student s6 = new Student("wuqilong", 40);Student s7 = new Student("fengqingy", 22);Student s8 = new Student("linqingxia", 29);// 添加元素ts.add(s1);ts.add(s2);ts.add(s3);ts.add(s4);ts.add(s5);ts.add(s6);ts.add(s7);ts.add(s8);// 遍历for (Student s : ts) {System.out.println(s.getName() + "---" + s.getAge());}}}


0 0