对TreeSet集合自定义排序

来源:互联网 发布:安卓壁纸软件 编辑:程序博客网 时间:2024/06/04 18:56

一: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":"女"}]


原创粉丝点击