1. TreeSet
在一次写力扣题的时候,用到了TreeSet,这里记录一下TreeSet的常用方式。
TreeSet的特点:有序,不可重复,红黑树,基于Treemap实现,自定义排序等特点。
java中实现的Set有HashSet ,LinkedHashSet , TreeSet
此处下方介绍Treeset
HashSet点击此链接
LinkedHashSet点击此链接
2.构造函数
TreeSet提供了四种构造器,如下图所示
2.1 无参数构造
Treeset的初始化
TreeSet treeSet = new TreeSet();
2.2 comparator
添加一个Compatator,如下假如使用一个从大到小的排序。
public static void main(String[] args) {
TreeSet<Integer> treeSet = new TreeSet<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
treeSet.add(1);
treeSet.add(3);
treeSet.add(2);
System.out.println(treeSet);
}
3. 常见操作元素
3.1 添加元素
如下所示,默认按照从小到大排序
重复添加相同的元素Treeset不变
3.2删除元素
删除成功返回true,删除失败返回false
boolean bool = treeSet.remove(object o);
删除不存在的元素,返回false,而不会报错
3.3 是否包含某个元素
boolean bool = treeSet.contains(object o);
3.4 clear方法
清空treeSet,使treeset为空
3.5 first(),last()
first()返回第一个object,last返回最后一个object。下方示例使用Integer。
public static void main(String[] args) {
TreeSet<Integer> treeSet = new TreeSet<>();
treeSet.add(1);
treeSet.add(3);
treeSet.add(2);
Integer first = treeSet.first();
Integer last = treeSet.last();
System.out.println(first);
System.out.println(last);
}
另外,first(),last()是 TreeSet 独有的方法,Set是不具有此方法的。因此创建treeset时需使用
TreeSet treeSet = new TreeSet<>();
而不能使用
Set treeSet = new TreeSet<>();
4.性能对比
与HashSet相比,TreeSet的性能更低。操作,比如添加、删除和搜索需要O(log n)的时间,而像打印操作ñ在有序元素需要O(n)的时间。不采用Hash算法来决定元素的存储位置,而是采用了红黑树。支持2种排序方法:自然排序和定制排序。默认是自然排序。