Java集合·13·TreeSet详解
一、概述
是一个不含重复元素,有序的集合类。作用为提供有序的Set集合。
继承自AbstractSet,实现了NavigableSet、Cloneable、Serializable接口。
SortedSet
Sorted相关方法,分为三类:
一类是获取元素项的方法,包括first()、last()
一类是获取元素集合的方法,包括subSet()、headSet()、tailSet()
一类是获取Comparator的方法,包括comparator()
NavigdationSet
导航相关方法,可以分为三类:
一类是提供元素项的导航方法,返回某个元素。包括lower()、floor()、ceiling()、higher()。ower、floor、ceiling 和 higher 分别返回小于、小于等于、大于等于、大于给定元素的元素,如果不存在这样的元素,则返回 null。
一类是提供元素集合的导航方法,返回元素集合。包括subSet()、headSet()、tailSet()、descendingSet()
一类是Iterator,返回Iterator。包括iterator()、descendingIterator()
二、特点
- 不含重复元素
- 不容许null值
- 有序,支持Comparator比较器
使用NavigationMap(TreeMap)作为存储
private transient NavigableMap m;
TreeSet(NavigableMap m) {
this.m = m;
}
四、实现要点
1.构造方法 基于NavigationMap生成
TreeSet(NavigableMap m) {
this.m = m;
}public TreeSet() {
this(new TreeMap());
}
public TreeSet(Comparator super E> comparator) {
this(new TreeMap<>(comparator));
}
public TreeSet(Collection extends E> c) {
this();
addAll(c);
}
public TreeSet(SortedSet s) {
this(s.comparator());
addAll(s);
}
2. 基本方法 添加,PRESENT为傀儡数据(Dummy value)
public boolean add(E e) {
return m.put(e, PRESENT)==null;
}
删除
public boolean remove(Object o) {
return m.remove(o)==PRESENT;
}
3. 访问方法 仅支持一种访问方法:Iterator
Iterator
Iterator可以分为顺序iterator和逆序descendingIterator,使用NavigationMap的keySet的Iterator/descendingKeySet的Iterator
public Iterator iterator() {
return m.navigableKeySet().iterator();
}
public Iterator descendingIterator() {
return m.descendingKeySet().iterator();
}
4.导航方法 分为两类介绍,返回单个元素和返回元素集合:
返回单个元素,直接调用NavigationMap的对应方法
public E first() {
return m.firstKey();
}
【Java集合·13·TreeSet详解】返回元素集合,返回NavigationMap中对应的集合(NavigationMap),并转化为NavigationSet,引用未变
public NavigableSet headSet(E toElement, boolean inclusive) {
return new TreeSet<>(m.headMap(toElement, inclusive));
}
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 图书集合完毕
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- java中如何实现重建二叉树
- 数组常用方法一
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- Java|Java基础——数组
- RxJava|RxJava 在Android项目中的使用(一)
- java之static、static|java之static、static final、final的区别与应用