SortedSet 接口扩展了 Set 并声明了一种按升序排序的集合行为。除了由 Set 定义的方法外,SortedSet 接口还声明了以下方法:
| 序号 |
方法 & 描述 |
| 1 |
Comparator comparator() 返回调用排序集合的比较器。如果使用自然顺序,则返回 null。 |
| 2 |
Object first() 返回调用排序集合的第一个元素。 |
| 3 |
SortedSet headSet(Object end) 返回一个 SortedSet,包含那些小于 end 的元素,这些元素也包含在调用的排序集合中。 |
| 4 |
Object last() 返回调用排序集合的最后一个元素。 |
| 5 |
SortedSet subSet(Object start, Object end) 返回一个 SortedSet,包括那些介于 start 和 end 之间的元素。返回的集合中的元素也被调用的对象引用。 |
| 6 |
SortedSet tailSet(Object start) 返回一个 SortedSet,包含那些大于或等于 start 的元素,这些元素也包含在排序集合中。 |
几个方法会在没有元素包含在调用集合中时抛出 NoSuchElementException。当一个对象与集合中的元素不兼容时,会抛出 ClassCastException。
如果尝试使用空对象并且集合不允许空,则会抛出 NullPointerException。
SortedSet 接口上的操作
创建 SortedSet
TreeSet 类实现了 SortedSet 接口。我们可以使用 TreeSet 构造器来创建一个 SortedSet 实例。
语法:
SortedSet<String> set = new TreeSet<>();
这里我们创建了一个 String 值的排序集合。这个集合将会存储唯一的字符串值。如果添加重复值,则会被丢弃。
向 SortedSet 添加值
SortedSet 提供了一个 add() 方法,可以用来向 SortedSet 实例添加值。每当一个值被添加到集合中,它就会与现有值进行比较。如果集合被修改则方法返回 true,否则返回 false。
语法:
public boolean add(E e)
其中 E 表示要添加的元素。如果元素已经存在,则不会执行任何操作,方法返回 false。
从 SortedSet 获取值
为了从 SortedSet 获取值,我们需要使用 iterator() 方法从 SortedSet 获取迭代器对象。一旦获得了迭代器对象,就可以使用该对象检索 SortedSet 中的值。
从 SortedSet 删除值
使用 remove(value) 方法,我们可以轻松地移除存储在 SortedSet 中的值/对象。
语法:
public boolean remove(Object value)
如果 value 不在集合中,则返回 false;否则移除该值并返回 true。
遍历 SortedSet
SortedSet 条目可以轻松导航。SortedSet 提供了一个 iterator() 方法,提供了一个遍历集合所有条目的迭代器。
语法:
public Iterator<E> iterator()
其中 E 是要遍历的对象类型。
SortedSet 接口示例
向 SortedSet 添加元素的示例
SortedSet 在多个类中实现,例如 TreeSet。下面是一个具有添加操作的 TreeSet 类的例子:
import java.util.Iterator;
import java.util.SortedSet;
import java.util.TreeSet;
public class SortedSetDemo {
public static void main(String[] args) {
SortedSet<String> set = new TreeSet<>();
set.add("b");
set.add("c");
set.add("a");
Iterator it = set.iterator();
while (it.hasNext()) {
Object element = it.next();
System.out.println(element.toString());
}
}
}
输出:
a
b
c
从 SortedSet 移除元素的示例
SortedSet 在多个类中实现,例如 TreeSet。下面是一个具有添加和移除操作的 TreeSet 类的例子:
import java.util.Iterator;
import java.util.SortedSet;
import java.util.TreeSet;
public class SortedSetDemo {
public static void main(String[] args) {
SortedSet<String> set = new TreeSet<>();
set.add("b");
set.add("c");
set.add("a");
set.add("d");
set.add("e");
set.add("f");
set.remove("c");
set.remove("f");
Iterator it = set.iterator();
while (it.hasNext()) {
Object element = it.next();
System.out.println(element.toString());
}
}
}
输出:
a
b
d
e
清空 SortedSet 的示例
SortedSet 在多个类中实现,例如 TreeSet。下面是一个具有添加和清空操作的 TreeSet 类的例子:
import java.util.Iterator;
import java.util.SortedSet;
import java.util.TreeSet;
public class SortedSetDemo {
public static void main(String[] args) {
SortedSet<String> set = new TreeSet<>();
set.add("b");
set.add("c");
set.add("a");
set.add("d");
set.add("e");
set.add("f");
System.out.println(set);
set.clear();
System.out.println(set);
}
}
输出:
[a, b, c, d, e, f]
[]
SortedSet 接口的优点
SortedSet 确保集合总是按值的升序排列。每当键值对被添加到 SortedSet 时,都会重新排序。 由于已排序且唯一,SortedSet 在搜索方面非常高效。 我们可以使用值类型的比较器来自定义排序机制。
SortedSet 接口的缺点
由于 SortedSet 实例每次添加或更改条目时都必须排序,因此在频繁更改的情况下会成为性能瓶颈。在这种情况下,SortedSet 不被推荐。 由于 SortedSet 只维护唯一记录,我们不能在数据集中可能出现重复条目的情况下使用此集合。