Java300学习笔记(14)——排序容器 TreeSet 和 TreeMap

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012292754/article/details/86683858

1 TreeMap

  • 确保 key 可以排序
  • 提供 key 比较器
  • public TreeMap(Comparator <? super K> comparator)

2 TreeSet

  • 确保元素实体可以排序且不可重复
  • public TreeSet(Comparator<? super E> comparator)
  • TreeSet添加数据时排序,数据更改不会影响原来的顺序
  • TreeSet 不要修改数据,否则可能会重复

2.1 对比 Set 接口

  • HashSet,元素必须重写 hashcode 和 equals 方法
  • 去重:比较等于0 即重复;

2.2 测试1

  • Person.java
package day04.col;

public class Person {
    private String name;
    private int handsome;

    public Person() {
    }

    public Person(String name, int handsome) {
        this.name = name;
        this.handsome = handsome;
    }

    @Override
    public String toString() {
        return "姓名 ='" + name + " 颜值=" + handsome+"\n";
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getHandsome() {
        return handsome;
    }

    public void setHandsome(int handsome) {
        this.handsome = handsome;
    }
}

  • TreeSetDemo
package day04.col;
import java.util.Comparator;
import java.util.TreeSet;

public class TreeSetDemo {
    public static void main(String[] args) {
        Person p1 = new Person("Mike", 100);
        Person p2 = new Person("John", 1000);
        Person p3 = new Person("Mary", 1200);
        Person p4 = new Person("Herry", 50);

        TreeSet<Person> persons = new TreeSet<>(
                new Comparator<Person>() {
                    @Override
                    public int compare(Person o1, Person o2) {

                        return o1.getHandsome() - o2.getHandsome();
                    }
                }
        );
        persons.add(p1);
        persons.add(p2);
        persons.add(p3);
        persons.add(p4);

        System.out.println(persons);

        p3.setHandsome(-100);

        System.out.println(persons);

        p1.setName("John");
        p1.setHandsome(1000);
        System.out.println(persons);
    }
}
[姓名 ='Herry 颜值=50
, 姓名 ='Mike 颜值=100
, 姓名 ='John 颜值=1000
, 姓名 ='Mary 颜值=1200
]
[姓名 ='Herry 颜值=50
, 姓名 ='Mike 颜值=100
, 姓名 ='John 颜值=1000
, 姓名 ='Mary 颜值=-100
]
[姓名 ='Herry 颜值=50
, 姓名 ='John 颜值=1000
, 姓名 ='John 颜值=1000
, 姓名 ='Mary 颜值=-100
]

Process finished with exit code 0

2.3 改进测试

  • Person.java
package day04.col;

public class Person {
    private final String name;
    private final int handsome;

    public Person() {
        name = null;
        handsome = 0;
    }

    public Person(String name, int handsome) {
        this.name = name;
        this.handsome = handsome;
    }

    @Override
    public String toString() {
        return "姓名 ='" + name + " 颜值=" + handsome + "\n";
    }

    public String getName() {
        return name;
    }


    public int getHandsome() {
        return handsome;
    }


}

2.4 测试(实现 Comparable 接口)

  • Worker.java
package day04.col;

public class Worker implements Comparable<Worker> {
    private String type;
    private double salary;

    public Worker() {
    }

    public Worker(String type, double salary) {
        this.type = type;
        this.salary = salary;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    /*
     *按照工资升序排序
     * */

    @Override
    public int compareTo(Worker o) {
        return this.salary > o.salary ? 1 :
                (this.salary == o.salary ? 0 : -1);
    }

    @Override
    public String toString() {
        return "工种:" + this.type + ",工资:" + this.salary + "\n";
    }
}

  • TreeSetDemo2.java
package day04.col;


import java.util.TreeSet;

public class TreeSetDemo2 {
    public static void main(String[] args) {
        Worker w1 = new Worker("矿工",12000);
        Worker w2 = new Worker("农民工",8000);
        Worker w3 = new Worker("程序猿",5000);

        TreeSet<Worker> employees = new TreeSet<>();
        employees.add(w1);
        employees.add(w2);
        employees.add(w3);

        System.out.println(employees);
    }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u012292754/article/details/86683858