Java中的SortedSet接口及其示例
java.util包中的SortedSet接口扩展了集合框架中的Set接口。它是一个实现数学集合的接口。该接口包含了从Set接口继承的方法,同时添加了一个特性,即按有序方式存储该接口中的所有元素。

如上图所示,可导航的集合扩展了SortedSet接口。由于集合不保留插入顺序,可导航集合接口提供了遍历集合的实现。实现可导航集合的类是TreeSet,它是一种自平衡树的实现。因此,该接口提供了一种通过该树进行导航的方式。
声明: SortedSet接口的声明如下:
public interface SortedSet extends Set
Sorted Set示例:
// Java程序演示Sorted Set
import java.util.*;
class SortedSetExample {
public static void main(String[] args) {
SortedSet<String> ts = new TreeSet<String>();
// 使用add()方法将元素添加到TreeSet中
ts.add("India");
ts.add("Australia");
ts.add("South Africa");
// 添加重复元素
ts.add("India");
// 显示TreeSet
System.out.println(ts);
// 使用remove()方法从TreeSet中删除元素
ts.remove("Australia");
System.out.println("删除Australia后的Set:" + ts);
// 遍历TreeSet中的项
System.out.println("遍历Set:");
Iterator<String> i = ts.iterator();
while (i.hasNext())
System.out.println(i.next());
}
}
[Australia, India, South Africa]
删除Australia后的Set:[India, South Africa]
遍历Set:
India
South Africa
注意: SortedSet的所有元素都必须实现Comparable接口(或由指定的比较器接受),并且所有这些元素必须相互比较。相互比较表示两个对象将彼此作为其compareTo方法的参数接受。
创建SortedSet对象
由于SortedSet是一个接口,因此无法创建类型为SortedSet的对象。我们总是需要一个扩展该列表的类来创建对象。此外,在Java 1.5中引入了泛型后,可以限制可以存储在SortedSet中的对象类型。可以定义类型安全的集合如下:
//Obj是要存储在SortedSet中的对象类型 SortedSet<Obj> set = new TreeSet<Obj>();
在SortedSet上执行各种操作
由于SortedSet是一个接口,因此它只能与实现此接口的类一起使用。TreeSet是实现SortedSet接口的类。现在,让我们看看如何在TreeSet上执行一些常用操作。
1.添加元素: 为向SortedSet添加元素,我们可以使用add()方法。然而,在TreeSet中不保留插入顺序。对于每个元素,内部按升序比较并排序。我们需要注意重复元素是不允许的,而且不接受空值。
// Java代码演示
// SortedSet的工作方式
import java.util.*;
class GFG {
public static void main(String[] args)
{
SortedSet ts
= new TreeSet();
// 使用add()方法添加元素
ts.add("A");
ts.add("B");
ts.add("C");
ts.add("A");
System.out.println(ts);
}
}
[A, B, C]```
2. 访问元素: 在添加元素之后,如果我们希望访问元素,则可以使用内置方法,例如contains(),first(),last()等。
// Java代码演示
// SortedSet的工作方式
import java.util.*;
class GFG {
public static void main(String[] args)
{
SortedSet ts
= new TreeSet();
// 使用add()方法添加元素
ts.add("A");
ts.add("B");
ts.add("C");
ts.add("A");
System.out.println("Sorted Set is " + ts);
String check = "D";
// 检查上述字符串是否存在于
// SortedSet中
System.out.println("Contains " + check
+ " " + ts.contains(check));
// 打印SortedSet中的第一个元素
System.out.println("First Value " + ts.first());
// 打印SortedSet中的最后一个元素
System.out.println("Last Value " + ts.last());
}
}
Sorted Set is [A, B, C]
Contains D false
First Value A
Last Value C
3. 移除值: 可以使用remove()方法从SortedSet中删除值。
// Java代码演示
// SortedSet的工作方式
import java.util.*;
class GFG{
public static void main(String[] args)
{
SortedSet ts
= new TreeSet();
// 使用add()方法添加元素
ts.add("A");
ts.add("B");
ts.add("C");
ts.add("B");
ts.add("D");
ts.add("E");
System.out.println("Initial TreeSet " + ts);
// 删除元素b
ts.remove("B");
System.out.println("After removing element " + ts);
}
}
Initial TreeSet [A, B, C, D, E]
After removing element [A, C, D, E]
4. 遍历SortedSet: 有多种方法可以遍历SortedSet。 最著名的是使用增强的for循环。
// Java代码演示
// SortedSet的工作方式
import java.util.*;
class GFG
{
public static void main(String[] args)
{
SortedSet ts
= new TreeSet();
// 使用add()方法添加元素
ts.add("C");
ts.add("D");
ts.add("E");
ts.add("A");
ts.add("B");
ts.add("Z");
// 遍历SortedSet
for (String value : ts)
System.out.print(value
+ ", ");
System.out.println();
}
}
A, B, C, D, E, Z,
实现SortedSet接口的类是TreeSet。
TreeSet: TreeSet类是在集合框架中实现的SortedSet接口的一个实现,SortedSet扩展了Set接口。它表现得像一个简单的set,但它存储元素的格式是按排序的方式。TreeSet使用树数据结构进行存储,对象以按升序排序的方式存储。但我们可以使用TreeSet.descendingIterator() 方法按降序迭代。让我们看看如何使用这个类创建一个SortedSet对象。
// Java程序演示
//使用TreeSet类创建SortedSet对象
import java.util.*;
class GFG {
public static void main(String[] args)
{
SortedSet ts
= new TreeSet();
//使用add()添加元素到TreeSet
ts.add("India");
ts.add("Australia");
ts.add("South Africa");
//添加重复元素
ts.add("India");
//显示TreeSet
System.out.println(ts);
//使用remove()从TreeSet中删除元素
ts.remove("Australia");
System.out.println("删除Australia后的集合:" + ts);
//遍历TreeSet项
System.out.println("迭代集合:");
Iterator i = ts.iterator();
while (i.hasNext())
System.out.println(i.next());
}
}
[Australia, India, South Africa]
删除Australia后的集合:[India, South Africa]
迭代集合:
India
South Africa
SortedSet接口的方法
SortedSet接口中包含的方法如下,其中“*”表示方法是Set接口的一部分。
| 方法 | 描述 |
|---|---|
| add(element) | 此方法用于将特定元素添加到集合中。仅在集合中不存在指定的元素时,该函数将添加该元素否则如果元素已经存在于集合中,则该函数返回False。 |
| addAll(collection) | 此方法用于将指定集合中的所有元素追加到现有集合中。元素是随意添加的,没有遵循任何特定顺序。 |
| clear() | 此方法用于从集合中删除所有元素,但不删除集合。集合的引用仍然存在。 |
| comparator() | 此方法返回用于对此集合中的元素排序的比较器,如果此集合使用其元素的自然顺序,则返回null。 |
| contains(element) | 此方法用于检查集合中是否存在特定元素。 |
| containsAll(collection) | 此方法用于检查集合是否包含给定集合中存在的所有元素。如果集合包含所有元素,则此方法返回true,否则返回false。 |
| first() | 此方法返回此集合中存在的第一个(最低)元素。 |
| hashCode() | 此方法用于获取此Set实例的hashCode值。它返回一个整数值,该整数值是此Set实例的hashCode值。 |
| headSet(element) | 此方法返回排序集合中少于存在于元素之下的元素元素。 |
| isEmpty() | 此方法用于检查SortedSet是否为空。 |
| last() | 此方法返回此集合中存在的最后一个(最高)元素。 |
| remove(element) | 此方法用于从集合中删除给定的元素。如果指定的元素存在于集合中,则此方法返回True,否则返回False。 |
| removeAll(collection) | 此方法用于从集合中删除存在于集合中的所有元素。如果此集合因调用而更改,则此方法返回true。 |
| retainAll(collection) | 此方法用于保留集合中提到的所有元素。如果此集合因调用而更改,则此方法返回true。 |
| size() | 此方法用于获取集合的大小。这返回一个整数值,表示元素的数量。 |
| subSet(element1, element2) | 此方法返回一个从包含在element1和element2之间的元素的集合中排序的子集。 |
| tailSet(element) | 此方法返回排序集合中大于或等于存在于元素之上的元素元素。 |
| toArray() | 此方法用于形成与Set中相同的元素的数组。 |
极客教程