5.3.1 概述
TreeSet 有两种排序方法:自然排序和定制排序。默认情况下,TreeSet 采用自然排序。
5.3.2 自然排序
Comparable 的实现:
示例:
package com.github.set.demo4;
import java.util.Set;
import java.util.TreeSet;
/**
* @author maxiaoke.com
* @version 1.0
*
*/
public class Test {
public static void main(String[] args) {
Set<String> set = new TreeSet<>();
set.add("g");
set.add("b");
set.add("d");
set.add("c");
set.add("f");
System.out.println("set = " + set); // set = [b, c, d, f, g]
}
}
示例:
package com.github.set.demo5;
/**
* @author maxiaoke.com
* @version 1.0
*
*/
public class Person implements Comparable<Person> {
private String name;
private int age;
public Person() {}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int compareTo(Person o) {
return Integer.compare(this.getAge(), o.getAge());
}
@Override
public String toString() {
return "Person{" + "name='" + this.name + '\'' + ", age='" + this.age + '\'' + '}';
}
}
package com.github.set.demo5;
import java.util.Set;
import java.util.TreeSet;
/**
* @author maxiaoke.com
* @version 1.0
*
*/
public class Test {
public static void main(String[] args) {
Set<Person> set = new TreeSet<>();
set.add(new Person("张三", 15));
set.add(new Person("李四", 99));
set.add(new Person("王五", 58));
set.add(new Person("赵六", 9));
set.add(new Person("田七", 1));
set.add(new Person("王八", 44));
// set = [Person{name='田七', age='1'}, Person{name='赵六', age='9'}, Person{name='张三', age='15'}, Person{name='王八',
// age='44'}, Person{name='王五', age='58'}, Person{name='李四', age='99'}]
System.out.println("set = " + set);
}
}
5.3.3 定制排序
使用定制排序判断两个元素相等的标准是:通过 Comparator 比较两个元素返回了 0 。
示例:
package com.github.set.demo6;
/**
* @author maxiaoke.com
* @version 1.0
*
*/
public class Person {
private String name;
private int age;
public Person() {}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" + "name='" + this.name + '\'' + ", age='" + this.age + '\'' + '}';
}
}
package com.github.set.demo6;
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
/**
* @author maxiaoke.com
* @version 1.0
*
*/
public class Test {
public static void main(String[] args) {
Set<Person> set = new TreeSet<>(new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return Integer.compare(o2.getAge(), o1.getAge());
}
});
set.add(new Person("张三", 15));
set.add(new Person("李四", 99));
set.add(new Person("王五", 58));
set.add(new Person("赵六", 9));
set.add(new Person("田七", 1));
set.add(new Person("王八", 44));
// set = [Person{name='李四', age='99'}, Person{name='王五', age='58'}, Person{name='王八', age='44'}, Person{name='张三', age='15'}, Person{name='赵六', age='9'}, Person{name='田七', age='1'}]
System.out.println("set = " + set);
}
}