TreeSet
存储结构:红黑树
基于排列顺序实现元素不重复
实现了SortedSet接口,对集合元素自动排序
元素对象的类型必须实现Comparable接口,指定排序规则
通过CompareTo方法确定是否为重复元素
简单示例
package set;
import java.util.TreeSet;
public class TreeSetDemo {
public static void main(String[] args) {
TreeSet<String> tree = new TreeSet<String>();
tree.add("a");
tree.add("b");
tree.add("c");
tree.add("abc");
System.out.println(tree.size());
tree.forEach(System.out::println);
System.out.println("---------------");
System.out.println(tree.toString());
tree.remove("b");
System.out.println("-------------");
tree.forEach(System.out::println);
}
}
详细示例1(使用Comparable接口)
为了将自定义类添加进TreeSet我们需要这样做
编写自定义类继承Comparable接口实现
package set.entity;
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 name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public int compareTo(Person o) {
//比较结果:若比较结果相同则为0,不同则返回字典比较差值
int nameComp = this.getName().compareTo(o.getName());
int ageComp = this.getAge() - o.getAge();
System.out.println("..........");
System.out.println(nameComp);
return nameComp == 0 ? ageComp : nameComp;
}
}
测试类
package set;
import set.entity.Person;
import java.util.TreeSet;
public class TreeSetDemo2 {
public static void main(String[] args) {
TreeSet<Person> tree = new TreeSet<>();
tree.add(new Person("zhangsan",10));
tree.add(new Person("wangqiang",18));
tree.add(new Person("lisi",15));
tree.forEach(System.out::println);
}
}
结果
详细示例2(使用Comparator接口)
package set;
import set.entity.Person;
import java.util.Comparator;
import java.util.TreeSet;
public class TreeSetDemo3 {
public static void main(String[] args) {
TreeSet<Person> tree = new TreeSet<>(new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
int nameCom = o1.getName().compareTo(o2.getName());
int ageCom = o1.getAge() - o2.getAge();
return nameCom == 0 ? ageCom : nameCom;
}
});
tree.add(new Person("zhangsan",10));
tree.add(new Person("wangqiang",18));
tree.add(new Person("lisi",15));
tree.forEach(System.out::println);
}
}