目录
1. TreeSet简介
TreeSet 是一个有序集合,它的作用是提供有序的Set集合。其继承于 AbstractSet 类TreeSet 实现了 NavigableSet 接口,意味着它支持一系列的导航方法。比如查找指定目标最匹配项。
TreeSet 是通过 TreeMap 实现的一个有序的、不可重复的集合,底层维护的是红黑树结构。当TreeSet的泛型对象不是java的基本类型的包装类时,对象需要实现接口Comparable并重写此接口中的compareTo()方法。 TreeSet 实现了 Serializable 接口,所以它支持序列化。
2. 构造方法——API文档
构造方法详细信息:
public TreeSet()
构造一个新的,空的树组,根据其元素的自然排序进行排序。插入到集合中的所有元素必须实现Comparable接口。 此外,所有这些元素必须是相互可比的 : e1.compareTo(e2)不能为ClassCastException中的任何元素e1和e2 。 如果用户尝试向组中添加违反此约束的元素(例如,用户尝试将字符串元素添加到其元素为整数的集合),则add调用将抛出ClassCastException异常 。
public TreeSet(Comparator<? super E> comparator)
构造一个新的,空的树集,根据指定的比较器进行排序。 插入到集合中的所有元素必须由指定的比较器相互比较: comparator.
compare(
e1,e2)
不能为ClassCastException中的任何元素e1和e2 。如果用户尝试向该集合添加一个违反此约束的元素,则add调用将抛出ClassCastException异常 。
public TreeSet(Collection<? extends E> c)
构造一个包含指定集合中的元素的新树集,根据其元素的自然排序进行比较 。插入到集合中的所有元素必须实现Comparable接口。相互可比的 e1.compareTo(e2)不能为ClassCastException中的任何元素e1和e2 。
public TreeSet(SortedSet<E> s)
构造一个包含相同元素的新树,并使用与指定排序集相同的顺序。
3. 常用方法——API文档
TreeSet类在java.util包中,所以要先导入次包,如下:
import java.util.TreeSet;
创建一个Ingeter类型的TreeSet对象treeSet,如下:
TreeSet<Integer> treeSet = new TreeSet<>();
3.1 添加元素
实例如下:
添加一个元素
TreeSet<Integer> treeSet = new TreeSet<>();// 创建一个集合
// 添加一个元素
treeSet.add(10);
treeSet.add(22);
treeSet.add(5);
// 如果此元素存在则不添加返回false,否则返回true
System.out.println(treeSet.add(10));// 输出结果:false
System.out.println(treeSet);// 输出结果:[5, 10, 22]
添加集合
TreeSet<Integer> treeSet1 = new TreeSet<>();// 创建一个集合
treeSet1.add(10);
treeSet1.add(22);
treeSet1.add(5);
TreeSet<Integer> treeSet2 = new TreeSet<>();// 创建一个集合
treeSet2.add(15);
treeSet2.add(30);
// 将一个集合添加到另一个元素中
treeSet1.addAll(treeSet2);
System.out.println(treeSet1);// 输出结果:[5, 10, 15, 22, 30]
3.2 删除元素
实例如下:
删除一个元素
TreeSet<Integer> treeSet = new TreeSet<>();// 创建一个集合
treeSet.add(10);
treeSet.add(22);
treeSet.add(5);
// 删除一个元素,成功返回true,否则返回false
System.out.println(treeSet.remove(22));// 输出结果:true
System.out.println(treeSet.remove(20));// 输出结果:false
System.out.println(treeSet);// 输出结果:[5, 10]
3.3 判断集合元素个数
实例如下:
判断集合元素个数
TreeSet<Integer> treeSet = new TreeSet<>();// 创建一个集合
treeSet.add(10);
treeSet.add(22);
treeSet.add(50);
treeSet.add(32);
treeSet.add(9);
// 判断集合元素个数
System.out.println(treeSet.size());// 输出结果:5
3.4 判断集合是否包含此元素
实例如下:
判断集合是否包含一个元素
TreeSet<Integer> treeSet = new TreeSet<>();// 创建一个集合
treeSet.add(10);
treeSet.add(22);
treeSet.add(5);
// 判断集合是否包含此元素,包含返回true,否则返回false
System.out.println(treeSet.contains(30));// 输出结果:false
System.out.println(treeSet.contains(22));// 输出结果:true
3.5 迭代器遍历集合
实例如下:
迭代器遍历集合
TreeSet<Integer> treeSet = new TreeSet<>();// 创建一个集合
treeSet.add(10);
treeSet.add(22);
treeSet.add(50);
// 以升序返回该集合中的元素的迭代器
Iterator<Integer> it = treeSet.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
// 输出结果:
// 10
// 22
// 50
4. 在类对象中实现compareTo()方法
//创建一个类A实现接口Comparable
class A implements Comparable<A> {
int num;// 定义成员变量
// 有参的构造方法
public A(int num) {
this.num = num;
}
// 重写compareTo方法,用来对添加的对象进行判断排序
// sum > 0,把this对象添加到比较对象的右边
// sum < 0,把this对象添加到比较对象的左边
// sum = 0,集合中已存在此对象,不再添加
@Override
public int compareTo(A o) {
int sum = this.num - o.num;
return sum;
}
// 重写toString(),用来把对象地址返回一串简明的字符串
@Override
public String toString() {
return num + "";
}
}
public class Demo1 {
public static void main(String[] args) {
TreeSet<A> set = new TreeSet<>();// 创建一个集合
// 把类A的对象添加到集合中
set.add(new A(89));
set.add(new A(76));
set.add(new A(22));
set.add(new A(72));
set.add(new A(22));
System.out.println(set);// 输出结果:[22, 72, 76, 89]
}
}