Java TreeSet
精华
小牛编辑
190浏览
2023-03-14
1 什么是Java TreeSet
Java TreeSet类实现了Set接口,TreeSet接口使用树结构进行存储。TreeSet继承了AbstractSet类并实现了NavigableSet接口。TreeSet类的对象以升序方式存储。
关于Java TreeSet类的核心要点是:
- Java TreeSet类不能存储重复元素,和HashSet相似。
- Java TreeSet类的访问和检索时间快。
- Java TreeSet类不允许使用Null元素。
- Java TreeSet类是非同步(线程不安全的)。
- Java TreeSet类元素是升序的。
2 Java TreeSet的层次结构
如上图所示,Java TreeSet类实现了NavigableSet接口。NavigableSet接口按层次结构顺序继承了SortedSet,Set,Collection和Iterable接口。
3 Java TreeSet的语法
public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, Serializable
4 Java TreeSet的构造方法
构造方法 | 描述 |
---|---|
TreeSet() | 用于构造一个空Treeset,该TreeSet将根据自然顺序以升序排序。 |
TreeSet(Collection<? extends E> c) | 用于构建包含集合的元素的新TreeSet。 |
TreeSet(Comparator<? super E> comparator) | 用于构造一个空TreeSet,该TreeSet将根据给定的比较器进行排序。 |
TreeSet(SortedSet<E> s) | 用于构建包含给定SortedSet元素的TreeSet。 |
5 Java TreeSet的方法
方法 | 描述 |
---|---|
boolean add(E e) | 如果指定的元素不存在,则将元素添加到集合中。 |
boolean addAll(Collection<? extends E> c) | 如果指定的元素不存在,则将元素添加到集合中。 |
E ceiling(E e) | 从集合中返回指定元素的相等或最接近的最大元素,如果没有,则返回null。 |
Comparator<? super E> comparator() | 返回按顺序排列元素的比较器。 |
Iterator descendingIterator() | 用于按降序迭代元素。 |
NavigableSet descendingSet() | 以相反的顺序返回元素。 |
E floor(E e) | 返回集合中指定元素的等于或最接近的最小元素,如果没有,则返回null。 |
SortedSet headSet(E toElement) | 返回小于指定元素的元素组。 |
NavigableSet headSet(E toElement, boolean inclusive) | 返回小于或等于(如果包含,则为true)指定元素的元素组。 |
E higher(E e) | 从集合中返回指定元素中最接近的最大元素,如果没有,则返回null。 |
Iterator iterator() | 用于按升序迭代元素。 |
E lower(E e) | 从集合中返回指定元素中最接近的最小元素,如果没有,则返回null。 |
E pollFirst() | 用于检索和删除最小(第一个)元素。 |
E pollLast() | 用于检索和删除最大(最后)元素。 |
Spliterator spliterator() | 用于在元素上创建后绑定和故障快速拆分器(Spliterator)。 |
NavigableSet subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) | 返回位于给定范围之间的一组元素。 |
SortedSet subSet(E fromElement, E toElement) | 返回位于给定范围(包括fromElement和不包括toElement)之间的一组元素。 |
SortedSet tailSet(E fromElement) | 返回一组大于或等于指定元素的元素。 |
NavigableSet tailSet(E fromElement, boolean inclusive) | 返回一组大于或等于(如果包含,则为true)指定元素的元素。 |
boolean contains(Object o) | 如果集合包含指定的元素,则返回true。 |
boolean isEmpty() | 如果集合不包含任何元素,则返回true。 |
boolean remove(Object o) | 如果存在指定元素,则用于从集合中删除该元素。 |
void clear() | 用于删除集合中的所有元素。 |
Object clone() | 返回此TreeSet实例的浅表副本。 |
E first() | 返回TreeSet中当前的第一个(最低)元素。 |
E last() | 返回TreeSet中当前的最后一个(最高)元素。 |
int size() | 返回集合中的元素个数。 |
6 Java TreeSet示例1
package cn.xnip;
/**
* 小牛知识库网: https://www.xnip.cn
*/
/**
* Java TreeSet的例子
*/
import java.util.*;
class Demo{
public static void main(String args[]){
//创建TreeSet并添加元素
TreeSet<String> al=new TreeSet<String>();
al.add("Eric");
al.add("Jack");
al.add("Rose");
al.add("Mark");
//遍历元素
Iterator<String> itr=al.iterator();
while(itr.hasNext()){
System.out.println(itr.next());
}
}
}
输出结果为:
Eric
Jack
Mark
Rose
7 Java TreeSet示例2
让我们看一个以降序遍历元素的示例。
package cn.xnip;
/**
* 小牛知识库网: https://www.xnip.cn
*/
/**
* Java TreeSet的例子
*/
import java.util.*;
class Demo{
public static void main(String args[]){
TreeSet<String> set=new TreeSet<String>();
set.add("Eric");
set.add("Jack");
set.add("Rose");
System.out.println("倒序排序TreeSet:");
Iterator i=set.descendingIterator();
while(i.hasNext())
{
System.out.println(i.next());
}
}
}
输出结果为:
倒序排序TreeSet:
Rose
Jack
Eric
8 Java TreeSet示例3
让我们看一个示例来检索和删除最高和最低值。
package cn.xnip;
/**
* 小牛知识库网: https://www.xnip.cn
*/
/**
* Java TreeSet的例子
*/
import java.util.*;
class Demo{
public static void main(String args[]){
TreeSet<Integer> set=new TreeSet<Integer>();
set.add(24);
set.add(66);
set.add(12);
set.add(15);
System.out.println("最大值: "+set.pollFirst());
System.out.println("最小值: "+set.pollLast());
}
}
输出结果为:
栈顶值: 12
栈底: 66
9 Java TreeSet示例4
在此示例中,执行各种NavigableSet操作。
package cn.xnip;
/**
* 小牛知识库网: https://www.xnip.cn
*/
/**
* Java TreeSet的例子
*/
import java.util.*;
class TreeSet4{
public static void main(String args[]){
TreeSet<String> set=new TreeSet<String>();
set.add("A");
set.add("B");
set.add("C");
set.add("D");
set.add("E");
System.out.println("初始化TreeSet: "+set);
System.out.println("反转TreeSet: "+set.descendingSet());
System.out.println("headSet方法: "+set.headSet("C", true));
System.out.println("subSet方法: "+set.subSet("A", false, "E", true));
System.out.println("tailSet方法: "+set.tailSet("C", false));
}
}
输出结果为:
初始化TreeSet: [A, B, C, D, E]
反转TreeSet: [E, D, C, B, A]
headSet方法: [A, B, C]
subSet方法: [B, C, D, E]
tailSet方法: [D, E]
10 Java TreeSet示例5
在此示例中,执行各种SortedSetSet操作。
package cn.xnip;
/**
* 小牛知识库网: https://www.xnip.cn
*/
/**
* Java TreeSet的例子
*/
import java.util.*;
class Demo{
public static void main(String args[]){
TreeSet<String> set=new TreeSet<String>();
set.add("A");
set.add("B");
set.add("C");
set.add("D");
set.add("E");
System.out.println("初始化TreeSet: "+set);
System.out.println("headSet方法: "+set.headSet("C"));
System.out.println("subSet方法: "+set.subSet("A", "E"));
System.out.println("tailSet方法: "+set.tailSet("C"));
}
}
输出结果为:
初始化TreeSet: [A, B, C, D, E]
headSet方法: [A, B]
subSet方法: [A, B, C, D]
tailSet方法: [C, D, E]