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
只维护唯一记录,我们不能在数据集中可能出现重复条目的情况下使用此集合。