Java NavigableSet与实例
NavigableSet在Java集合框架中表示一个可导航的集合。NavigableSet接口继承自SortedSet接口。它的行为类似于SortedSet,除了SortedSet的排序机制外,我们还提供了导航方法。
例如,NavigableSet接口可以按照与SortedSet中定义的顺序相反的顺序导航集合。一个NavigableSet可以以升序或降序的方式被访问和遍历。实现这个接口的类有:TreeSet和ConcurrentSkipListSet。
这里,E是这个集合所维护的元素的类型。
所有的超接口 。
Collection<E>, Iterable<E>, Set<E> , SortedSet<E>
所有已知的实现类 。
ConcurrentSkipListSet , TreeSet<E>
声明: NavigableSet被声明为
public interface NavigableSet<E> extends SortedSet<E>
创建NavigableSet对象
因为NavigableSet是一个接口,所以不能创建NavigableSet类型的对象。我们总是需要一个扩展这个列表的类来创建一个对象。而且,在Java 1.5引入泛型之后,我们可以限制NavigableSet中可以存储的对象的类型。这个类型安全的集合可以定义为。
// Obj是要存储在NavigableSet中的对象的类型
NavigableSet<Obj> set = new TreeSet<Obj>()
例子
输出
对NavigableSet执行各种操作
由于NavigableSet是一个接口,它只能与实现该接口的类一起使用。TreeSet就是实现了NavigableSet接口的类。现在,让我们看看如何在TreeSet上执行一些常用的操作。
1.添加元素: 为了向NavigableSet添加一个元素,我们可以使用add()方法。然而,插入的顺序在TreeSet中没有被保留。在内部,每一个元素的值都是按照升序进行比较和排序的。我们需要注意的是,重复的元素是不允许的,所有重复的元素都会被忽略。而且,NavigableSet也不接受空值。
输出
2.访问元素: 在添加元素后,如果我们想访问这些元素,我们可以使用内置的方法,如contains(), first(), last()等。
- contains()
- first()
- last()
输出
3.删除数值: 可以使用remove(), pollFirst(), pollLast()方法从NavigableSet中删除数值。
- remove()
- pollFirst()
- pollLast()
输出
4.遍历NavigableSet: 有各种方法来遍历NavigableSet。最著名的是使用增强的for循环。
输出
可导航集的方法
以下是NavigableSet接口中的方法。
方法 | 描述 |
---|---|
ceiling(E e) | 返回这个集合中大于或等于给定元素的最小元素,如果没有这样的元素,则返回空。 |
descendingIterator() | 返回这个集合中的元素的迭代器,按降序排列。 |
descendingSet() | 返回这个集合中所包含的元素的反向顺序视图。 |
floor(E e) | 返回这个集合中小于或等于给定元素的最大元素,如果没有这样的元素,则返回空。 |
headSet(E toElement) | 返回这个集合中元素严格小于toElement的部分的视图。 |
headSet(E toElement, boolean inclusive) | 返回这个集合中元素小于(或等于,如果包容性为真)toElement的部分的视图。 |
higher(E e) | 返回这个集合中严格大于给定元素的最小元素,如果没有这样的元素,则返回空。 |
iterator() | 返回这个集合中的元素的迭代器,按升序排列。 |
lower(E e) | 返回这个集合中严格小于给定元素的最大元素,如果没有这样的元素,则返回null。 |
pollFirst() | 检索并删除第一个(最低)元素,如果这个集合是空的,则返回null。 |
pollLast() | 检索并删除最后一个(最高)元素,如果这个集合是空的,则返回null。 |
subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) | 返回这个集合中元素范围从fromElement到toElement的部分的视图。 |
subSet(E fromElement, E toElement) | 返回这个集合中元素范围从fromElement(包括)到toElement(不包括)的部分的视图。 |
tailSet(E fromElement) | 返回这个集合中元素大于或等于fromElement的部分的视图。 |
tailSet(E fromElement, boolean inclusive) | 返回这个集合中元素大于(或等于,如果包容性为真)fromElement的部分的视图。 |
从java.util.SortedSet接口继承的方法
方法 | 描述 |
---|---|
comparator() | 该方法返回用于对这个集合中的元素进行排序的比较器,如果这个集合使用其元素的自然排序,则返回空。 |
first() | 这个方法返回这个集合中存在的第一个(最低)元素。 |
last() | 该方法返回集合中的最后一个(最高)元素。 |
spliterator() | 在这个排序的集合中的元素上创建一个Spliterator。 |
从java.util.Set接口继承的方法
方法 | 描述 |
---|---|
add(element) | 这个方法用来添加一个特定的元素到集合中。只有当指定的元素还没有出现在集合中时,该函数才会添加该元素,否则,如果该元素已经出现在集合中,该函数会返回False。 |
addAll(collection) | 这个方法用于将所述集合中的所有元素追加到现有的集合中。这些元素是随机添加的,不遵循任何特定的顺序。 |
clear() | 这个方法用来从集合中删除所有的元素,但不是删除集合。该集合的引用仍然存在。 |
contains(element) | 这个方法用来检查一个特定的元素是否存在于集合中。 |
containsAll(collection) | 这个方法用来检查集合是否包含了存在于给定集合中的所有元素。 如果集合包含所有的元素,该方法返回true;如果有任何元素丢失,则返回false。 |
equals() | 将指定的对象与这个集合进行比较,看是否相等。 |
hashCode() | 该方法用于获取该集合实例的hashCode值。它返回一个整数值,该值是这个Set实例的hashCode值。 |
isEmpty() | 这个方法用来检查一个NavigableSet是否为空。 |
remove(element) | 这个方法用来从集合中删除给定的元素。如果指定的元素存在于集合中,该方法返回True,否则返回False。 |
removeAll(collection) | 该方法用于从集合中删除所有存在于集合中的元素。如果这个集合因调用而改变,该方法返回真。 |
retainAll(collection) | 这个方法用于保留集合中的所有元素,这些元素在给定的集合中被提及。如果这个集合在调用后发生了变化,该方法将返回true。 |
size() | 这个方法用来获取集合的大小。它返回一个整数值,表示元素的数量。 |
toArray() | 这个方法用来形成一个与集合相同元素的数组。 |
toArray(T[] a) | 返回一个包含这个集合中所有元素的数组;返回的数组的运行时类型是指定数组的类型。 |
java.util.Collection接口中声明的方法
方法 | 描述 |
---|---|
parallelStream() | 返回一个以该集合为源的可能的并行流。 |
removeIf(Predicate<? super E> filter) | 删除这个集合中满足给定谓词的所有元素。 |
stream() | 返回一个以这个集合为源的顺序流。 |
toArray(IntFunction<T[]> generator) | 返回一个包含此集合中所有元素的数组,使用提供的生成器函数来分配返回的数组。 |
java.lang.Iterable接口中声明的方法
方法 | 描述 |
---|---|
forEach(Consumer<? super T> action) | 对Iterable中的每个元素执行给定的动作,直到所有元素都被处理完,或者该动作抛出一个异常。 |