版权声明:本文为博主原创文章,未经博主允许不得转载。 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);
}
}