一:TreeSet定制排序
构建 对象 Animal
public class Animal { private Integer age; private String name; public Animal(Integer age, String name) { this.age = age; this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
实现Comparator接口
class MyComparator implements Comparator { // 实现compare方法 @Override public int compare(Object o1, Object o2) { if (o1 instanceof Animal && o2 instanceof Animal) { Animal a1 = (Animal)o1; Animal a2 = (Animal)o2; if (a1.getAge() > a2.getAge()) { return 1; } if (a1.getAge() < a2.getAge()) { return -1; } } return 0; } }创建对象,构建
public static void main(String[] args) { //创建TreeSet集合对象时,提供一个一个Comparator对象, TreeSet<Animal> set = new TreeSet<Animal>(new MyComparator()); /** * 要实现定制排序,需要在创建TreeSet集合对象时,提供一个一个Comparator对象, * 该对象里负责集合元素的排序逻辑; */ set.add(new Animal(2, "狗")); set.add(new Animal(12, "猪")); set.add(new Animal(5, "猫")); set.add(new Animal(1, "鸡")); System.out.println(JSON.toJSONString(set)); }排序结果 :
[{"age":1,"name":"鸡"},{"age":2,"name":"狗"},{"age":5,"name":"猫"},{"age":12,"name":"猪"}]
二:TreeSet的自然排序:
步骤:
1.让元素自身具备比较性,
2.实现Compareable接口,覆盖其CompareTo方法
public class Student implements Comparable{ private String name; private Integer age; private String sex; public Student(String name, Integer age, String sex) { this.name = name; this.age = age; this.sex = sex; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public int compareTo(Object obj) { if (!(obj instanceof Student)) { throw new RuntimeException("不是该对象"); } Student student = (Student)obj; // 当前对象的年龄与插入对象的年龄进行比较,当前年龄大于插入对象的年龄时,返回1, // 此时将插入二叉树的右边,当等于时,返回0,进行次要条件的比较,再次调用;当小于时,返回-1; if (this.age > student.age) { return 1; } if (this.age == student.age) { return this.name.compareTo(student.name); } return -1; } }
public static void main(String[] args) { TreeSet treeSet = new TreeSet(); treeSet.add(new Student("张三", 23, "男")); treeSet.add(new Student("李四", 48, "女")); treeSet.add(new Student("王五", 26, "女")); treeSet.add(new Student("赵六", 18, "男")); System.out.println(JSON.toJSONString(treeSet)); }结果:
[{"age":18,"name":"赵六","sex":"男"},{"age":23,"name":"张三","sex":"男"},{"age":26,"name":"王五","sex":"女"},{"age":48,"name":"李四","sex":"女"}]