JavaTM Platform
Standard Ed. 6

java.util.concurrent
类 ConcurrentSkipListSet<E>

java.lang.Object
  继承者 java.util.AbstractCollection<E>
      继承者 java.util.AbstractSet<E>
          继承者 java.util.concurrent.ConcurrentSkipListSet<E>
类型参数:
E - 此 set 维护的元素类型
所有已实现的接口:
Serializable, Cloneable, Iterable<E>, Collection<E>, NavigableSet<E>, Set<E>, SortedSet<E>

public class ConcurrentSkipListSet<E>
     
extends AbstractSet<E>
implements NavigableSet<E>, Cloneable, Serializable

一个基于 ConcurrentSkipListMap 的可缩放并发 NavigableSet 实现。set 的元素可以根据它们的自然顺序进行排序,也可以根据创建 set 时所提供的 Comparator 进行排序,具体取决于使用的构造方法。

此实现为 containsaddremove 操作及其变体提供预期平均 log(n) 时间开销。多个线程可以安全地并发执行插入、移除和访问操作。迭代器是弱一致 的,返回的元素将反映迭代器创建时或创建后某一时刻的 set 状态。它们 抛出 ConcurrentModificationException,可以并发处理其他操作。升序排序视图及其迭代器比降序排序视图及其迭代器更快。

请注意,与在大多数 collection 中不同,这里的 size 方法不是 一个固定时间 (constant-time) 操作。由于这些 set 的异步特性,确定元素的当前数目需要遍历元素。此外,批量操作 addAllremoveAllretainAllcontainsAll 并不 保证能以原子方式 (atomically) 执行。例如,与 addAll 操作一起并发操作的迭代器只能查看某些附加元素。

此类及其迭代器实现 SetIterator 接口的所有可选 方法。与大多数其他并发 collection 实现一样,此类不允许使用 null 元素,因为无法可靠地将 null 参数及返回值与不存在的元素区分开来。

此类是 Java Collections Framework 的成员。

从以下版本开始:
1.6
另请参见:
序列化表格

构造方法摘要
ConcurrentSkipListSet()
          构造一个新的空 set,该 set 按照元素的自然顺序对其进行排序。
ConcurrentSkipListSet(Collection<? extends E> c)
          构造一个包含指定 collection 中元素的新 set,这个新 set 按照元素的自然顺序对其进行排序。
ConcurrentSkipListSet(Comparator<? super E> comparator)
          构造一个新的空 set,该 set 按照指定的比较器对其元素进行排序。
ConcurrentSkipListSet(SortedSet<E> s)
          构造一个新 set,该 set 所包含的元素与指定的有序 set 包含的元素相同,使用的顺序也相同。
 
方法摘要
 boolean add(E e)
          如果此 set 中不包含指定元素,则添加指定元素。
 E ceiling(E e)
          返回此 set 中大于等于给定元素的最小元素;如果不存在这样的元素,则返回 null
 void clear()
          从此 set 中移除所有元素。
 ConcurrentSkipListSet<E> clone()
          返回此 ConcurrentSkipListSet 实例的浅表副本。
 Comparator<? super E> comparator()
          返回对此 set 中的元素进行排序的比较器;如果此 set 使用其元素的自然顺序,则返回 null
 boolean contains(Object o)
          如果此 set 包含指定的元素,则返回 true
 Iterator<E> descendingIterator()
          返回在此 set 的元素上以降序进行迭代的迭代器。
 NavigableSet<E> descendingSet()
          返回此 set 中所包含元素的逆序视图。
 boolean equals(Object o)
          比较指定对象与此 set 的相等性。
 E first()
          返回此 set 中当前第一个(最低)元素。
 E floor(E e)
          返回此 set 中小于等于给定元素的最大元素;如果不存在这样的元素,则返回 null
 NavigableSet<E> headSet(E toElement)
          返回此 set 的部分视图,其元素严格小于 toElement
 NavigableSet<E> headSet(E toElement, boolean inclusive)
          返回此 set 的部分视图,其元素小于(或等于,如果 inclusive 为 true)toElement
 E higher(E e)
          返回此 set 中严格大于给定元素的最小元素;如果不存在这样的元素,则返回 null
 boolean isEmpty()
          如果此 set 不包含任何元素,则返回 true
 Iterator<E> iterator()
          返回在此 set 的元素上以升序进行迭代的迭代器。
 E last()
          返回此 set 中当前最后一个(最高)元素。
 E lower(E e)
          返回此 set 中严格小于给定元素的最大元素;如果不存在这样的元素,则返回 null
 E pollFirst()
          获取并移除第一个(最低)元素;如果此 set 为空,则返回 null
 E pollLast()
          获取并移除最后一个(最高)元素;如果此 set 为空,则返回 null
 boolean remove(Object o)
          如果此 set 中存在指定的元素,则将其移除。
 boolean removeAll(Collection<?> c)
          从此 set 中移除包含在指定 collection 中的所有元素。
 int size()
          返回此 set 中的元素数目。
 NavigableSet<E> subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive)
          返回此 set 的部分视图,其元素范围从 fromElementtoElement
 NavigableSet<E> subSet(E fromElement, E toElement)
          返回此 set 的部分视图,其元素从 fromElement(包括)到 toElement(不包括)。
 NavigableSet<E> tailSet(E fromElement)
          返回此 set 的部分视图,其元素大于等于 fromElement
 NavigableSet<E> tailSet(E fromElement, boolean inclusive)
          返回此 set 的部分视图,其元素大于(或等于,如果 inclusive 为 true)fromElement
 
从类 java.util.AbstractSet 继承的方法
hashCode
 
从类 java.util.AbstractCollection 继承的方法
addAll, containsAll, retainAll, toArray, toArray, toString
 
从类 java.lang.Object 继承的方法
finalize, getClass, notify, notifyAll, wait, wait, wait
 
从接口 java.util.Set 继承的方法
addAll, containsAll, hashCode, retainAll, toArray, toArray
 

构造方法详细信息

ConcurrentSkipListSet

public ConcurrentSkipListSet()
构造一个新的空 set,该 set 按照元素的 自然顺序对其进行排序。


ConcurrentSkipListSet

public ConcurrentSkipListSet(Comparator<? super E> comparator)
构造一个新的空 set,该 set 按照指定的比较器对其元素进行排序。

参数:
comparator - 用于对此 set 进行排序的比较器。如果此参数为 null,则使用元素的 自然顺序

ConcurrentSkipListSet

public ConcurrentSkipListSet(Collection<? extends E> c)
构造一个包含指定 collection 中元素的新 set,这个新 set 按照元素的 自然顺序对其进行排序。

参数:
c - 将组成新 set 的元素
抛出:
ClassCastException - 如果 c 中的元素不是 Comparable,或者无法相互比较
NullPointerException - 如果指定的 collection 或它的任何元素为 null

ConcurrentSkipListSet

public ConcurrentSkipListSet(SortedSet<E> s)
构造一个新 set,该 set 所包含的元素与指定的有序 set 包含的元素相同,使用的顺序也相同。

参数:
s - 有序 set,其元素将组成新的 set
抛出:
NullPointerException - 如果指定的有序 set 或它的任何元素为 null
方法详细信息

clone

public ConcurrentSkipListSet<E> clone()
返回此 ConcurrentSkipListSet 实例的浅表副本。(这些元素本身没有复制。)

覆盖:
Object 中的 clone
返回:
此 set 的浅表副本
另请参见:
Cloneable

size

public int size()
返回此 set 中的元素数目。如果此 set 包含的元素数大于 Integer.MAX_VALUE,则返回 Integer.MAX_VALUE

请注意,与在大多数 collection 中不同,此方法在这里不是 一个固定时间 (constant-time) 操作。由于这些 set 的异步特性,确定元素的当前数目需要遍历元素以计算其数目。此外,在执行此方法期间大小可能更改,在这种情况下,返回的结果将不准确。因此,此方法在并发应用程序中通常不是很有用。

指定者:
接口 Collection<E> 中的 size
指定者:
接口 Set<E> 中的 size
指定者:
AbstractCollection<E> 中的 size
返回:
此 set 中的元素数

isEmpty

public boolean isEmpty()
如果此 set 不包含任何元素,则返回 true

指定者:
接口 Collection<E> 中的 isEmpty
指定者:
接口 Set<E> 中的 isEmpty
覆盖:
AbstractCollection<E> 中的 isEmpty
返回:
如果此 set 不包含任何元素,则返回 true

contains

public boolean contains(Object o)
如果此 set 包含指定的元素,则返回 true。更确切地讲,当且仅当此 set 包含一个满足 o.equals(e) 的元素 e 时,返回 true

指定者:
接口 Collection<E> 中的 contains
指定者:
接口 Set<E> 中的 contains
覆盖:
AbstractCollection<E> 中的 contains
参数:
o - 检查是否包含在此 set 中的对象
返回:
如果此 set 包含指定的元素,则返回 true
抛出:
ClassCastException - 如果指定的元素无法与此 set 中的当前元素进行比较
NullPointerException - 如果指定的元素为 null

add

public boolean add(E e)
如果此 set 中不包含指定元素,则添加指定元素。更确切地讲,如果此 set 不包含满足 e.equals(e2) 的元素 e2,则向 set 中添加指定的元素 e。如果此 set 已经包含该元素,则调用不更改该 set 并返回 false

指定者:
接口 Collection<E> 中的 add
指定者:
接口 Set<E> 中的 add
覆盖:
AbstractCollection<E> 中的 add
参数:
e - 要添加到此 set 的元素
返回:
如果此 set 尚未包含指定的元素,则返回 true
抛出:
ClassCastException - 如果 e 无法与此 set 中的当前元素进行比较
NullPointerException - 如果指定的元素为 null

remove

public boolean remove(Object o)
如果此 set 中存在指定的元素,则将其移除。更确切地讲,如果此 set 中包含满足 o.equals(e) 的元素 e,则移除该元素。如果此 set 包含该元素(或者此 set 由于调用而发生了更改),则返回 true。(一旦调用返回,则此 set 不再包含该元素。)

指定者:
接口 Collection<E> 中的 remove
指定者:
接口 Set<E> 中的 remove
覆盖:
AbstractCollection<E> 中的 remove
参数:
o - 要从此 set 中移除的对象(如果存在)
返回:
如果此 set 中包含指定的元素,则返回 true
抛出:
ClassCastException - 如果 o 无法与此 set 中的当前元素进行比较
NullPointerException - 如果指定的元素为 null

clear

public void clear()
从此 set 中移除所有元素。

指定者:
接口 Collection<E> 中的 clear
指定者:
接口 Set<E> 中的 clear
覆盖:
AbstractCollection<E> 中的 clear

iterator

public Iterator<E> iterator()
返回在此 set 的元素上以升序进行迭代的迭代器。

指定者:
接口 Iterable<E> 中的 iterator
指定者:
接口 Collection<E> 中的 iterator
指定者:
接口 NavigableSet<E> 中的 iterator
指定者:
接口 Set<E> 中的 iterator
指定者:
AbstractCollection<E> 中的 iterator
返回:
在此 set 的元素上以升序进行迭代的迭代器

descendingIterator

public Iterator<E> descendingIterator()
返回在此 set 的元素上以降序进行迭代的迭代器。

指定者:
接口 NavigableSet<E> 中的 descendingIterator
返回:
在此 set 的元素上以降序进行迭代的迭代器

equals

public boolean equals(Object o)
比较指定对象与此 set 的相等性。如果指定的对象也是一个 set,两个 set 的大小相同,并且指定 set 的所有成员都包含在此 set 中(或者此 set 的所有成员都包含在指定的 set 中),则返回 true。此定义确保了 equals 方法可在不同的 set 接口实现间正常工作。

指定者:
接口 Collection<E> 中的 equals
指定者:
接口 Set<E> 中的 equals
覆盖:
AbstractSet<E> 中的 equals
参数:
o - 要与此 set 进行相等性比较的对象
返回:
如果指定的对象等于此 set,则返回 true
另请参见:
Object.hashCode(), Hashtable

removeAll

public boolean removeAll(Collection<?> c)
从此 set 中移除包含在指定 collection 中的所有元素。如果指定的 collection 也是一个 set,那么此操作将实际修改此 set,从而其值是两个 set 的一个 不对称差集

指定者:
接口 Collection<E> 中的 removeAll
指定者:
接口 Set<E> 中的 removeAll
覆盖:
AbstractSet<E> 中的 removeAll
参数:
c - 包含要从此 set 中移除的元素的 collection
返回:
如果此 set 由于调用而发生更改,则返回 true
抛出:
ClassCastException - 如果此 set 中一个或多个元素的类型与指定的 collection 不兼容
NullPointerException - 如果指定的 collection 或其任何元素为 null
另请参见:
AbstractCollection.remove(Object), AbstractCollection.contains(Object)

lower

public E lower(E e)
从接口 NavigableSet 复制的描述
返回此 set 中严格小于给定元素的最大元素;如果不存在这样的元素,则返回 null

指定者:
接口 NavigableSet<E> 中的 lower
参数:
e - 要匹配的值
返回:
小于 e 的最大元素;如果不存在这样的元素,则返回 null
抛出:
ClassCastException - 如果指定元素不能与 set 中的当前元素进行比较
NullPointerException - 如果指定的元素为 null

floor

public E floor(E e)
从接口 NavigableSet 复制的描述
返回此 set 中小于等于给定元素的最大元素;如果不存在这样的元素,则返回 null

指定者:
接口 NavigableSet<E> 中的 floor
参数:
e - 要匹配的值
返回:
小于等于 e 的最大元素;如果不存在这样的元素,则返回 null
抛出:
ClassCastException - 如果指定元素不能与 set 中的当前元素进行比较
NullPointerException - 如果指定的元素为 null

ceiling

public E ceiling(E e)
从接口 NavigableSet 复制的描述
返回此 set 中大于等于给定元素的最小元素;如果不存在这样的元素,则返回 null

指定者:
接口 NavigableSet<E> 中的 ceiling
参数:
e - 要匹配的值
返回:
大于等于 e 的最小元素;如果不存在这样的元素,则返回 null
抛出:
ClassCastException - 如果指定元素不能与 set 中的当前元素进行比较
NullPointerException - 如果指定的元素为 null

higher

public E higher(E e)
从接口 NavigableSet 复制的描述
返回此 set 中严格大于给定元素的最小元素;如果不存在这样的元素,则返回 null

指定者:
接口 NavigableSet<E> 中的 higher
参数:
e - 要匹配的值
返回:
大于 e 的最小元素;如果不存在这样的元素,则返回 null
抛出:
ClassCastException - 如果指定元素不能与 set 中的当前元素进行比较
NullPointerException - 如果指定的元素为 null

pollFirst

public E pollFirst()
从接口 NavigableSet 复制的描述
获取并移除第一个(最低)元素;如果此 set 为空,则返回 null

指定者:
接口 NavigableSet<E> 中的 pollFirst
返回:
第一个元素;如果此 set 为空,则返回 null

pollLast

public E pollLast()
从接口 NavigableSet 复制的描述
获取并移除最后一个(最高)元素;如果此 set 为空,则返回 null

指定者:
接口 NavigableSet<E> 中的 pollLast
返回:
最后一个元素;如果此 set 为空,则返回 null

comparator

public Comparator<? super E> comparator()
从接口 SortedSet 复制的描述
返回对此 set 中的元素进行排序的比较器;如果此 set 使用其元素的 自然顺序,则返回 null

指定者:
接口 SortedSet<E> 中的 comparator
返回:
用来对此 set 中的元素进行排序的比较器;如果此 set 使用其元素的自然顺序,则返回 null

first

public E first()
从接口 SortedSet 复制的描述
返回此 set 中当前第一个(最低)元素。

指定者:
接口 SortedSet<E> 中的 first
返回:
此 set 中当前第一个(最低)元素
抛出:
NoSuchElementException - 如果此 set 为空

last

public E last()
从接口 SortedSet 复制的描述
返回此 set 中当前最后一个(最高)元素。

指定者:
接口 SortedSet<E> 中的 last
返回:
此 set 中当前最后一个(最高)元素
抛出:
NoSuchElementException - 如果此 set 为空

subSet

public NavigableSet<E> subSet(E fromElement,
                              boolean fromInclusive,
                              E toElement,
                              boolean toInclusive)
从接口 NavigableSet 复制的描述
返回此 set 的部分视图,其元素范围从 fromElementtoElement。如果 fromElementtoElement 相等,则返回的 set 为空,除非 fromExclusivetoExclusive 都为 true。返回的 set 受此 set 支持,所以在返回 set 中的更改将反映在此 set 中,反之亦然。返回 set 支持此 set 支持的所有可选 set 操作。

如果试图在返回 set 的范围之外插入元素,则返回的 set 将抛出 IllegalArgumentException

指定者:
接口 NavigableSet<E> 中的 subSet
参数:
fromElement - 返回 set 的低端点
fromInclusive - 如果低端点要包含在返回的视图中,则为 true
toElement - 返回 set 的高端点
toInclusive - 如果高端点要包含在返回的视图中,则为 true
返回:
此 set 的部分视图,其元素范围从 fromElement(包括)到 toElement(不包括)
抛出:
ClassCastException - 如果不能使用此 set 的比较器或者使用自然顺序(如果 set 没有比较器)比较 fromElementtoElement。如果 fromElementtoElement 不能与 set 中的当前元素进行比较,则实现可以(但不是必须)抛出此异常。
NullPointerException - 如果 fromElementtoElement 为 null
IllegalArgumentException - 如果 fromElement 大于 toElement;如果此 set 本身有范围限制,并且 fromElementtoElement 位于范围的边界之外。

headSet

public NavigableSet<E> headSet(E toElement,
                               boolean inclusive)
从接口 NavigableSet 复制的描述
返回此 set 的部分视图,其元素小于(或等于,如果 inclusive 为 true) toElement。返回的 set 受此 set 支持,所以在返回 set 中的更改将反映在此 set 中,反之亦然。返回 set 支持此 set 支持的所有可选 set 操作。

如果试图在返回 set 的范围之外插入元素,则返回的 set 将抛出 IllegalArgumentException

指定者:
接口 NavigableSet<E> 中的 headSet
参数:
toElement - 返回 set 的高端点
inclusive - 如果高端点要包含在返回的视图中,则为 true
返回:
此 set 的部分视图,其元素小于(或等于,如果 inclusive 为 true) toElement
抛出:
ClassCastException - 如果 toElement 与此 set 的比较器不兼容(如果 set 没有比较器;如果 toElement 没有实现 Comparable)。如果 toElement 不能与 set 中的当前元素进行比较,则实现可以(但不是必须)抛出此异常。
NullPointerException - 如果 toElement 为 null
IllegalArgumentException - 如果此 set 本身有范围限制,并且 toElement 位于范围的边界之外

tailSet

public NavigableSet<E> tailSet(E fromElement,
                               boolean inclusive)
从接口 NavigableSet 复制的描述
返回此 set 的部分视图,其元素大于(或等于,如果 inclusive 为 true) fromElement。返回的 set 受此 set 支持,所以在返回 set 中的更改将反映在此 set 中,反之亦然。返回 set 支持此 set 支持的所有可选 set 操作。

如果试图在返回 set 的范围之外插入元素,则返回的 set 将抛出 IllegalArgumentException

指定者:
接口 NavigableSet<E> 中的 tailSet
参数:
fromElement - 返回 set 的低端点
inclusive - 如果低端点要包含在返回的视图中,则为 true
返回:
此 set 的部分视图,其元素大于等于 fromElement
抛出:
ClassCastException - 如果 fromElement 与此 set 的比较器不兼容(如果 set 没有任何比较器;如果 fromElement 没有实现 Comparable)。如果 fromElement 不能与 set 中的当前元素进行比较,则实现可以(但不是必须)抛出此异常。
NullPointerException - 如果 fromElement 为 null
IllegalArgumentException - 如果此 set 本身有范围限制,并且 fromElement 位于范围的边界之外

subSet

public NavigableSet<E> subSet(E fromElement,
                              E toElement)
从接口 NavigableSet 复制的描述
返回此 set 的部分视图,其元素从 fromElement(包括)到 toElement(不包括)。(如果 fromElementtoElement 相等,则返回空的 set)。返回的 set 受此 set 支持,所以在返回 set 中的更改将反映在此 set 中,反之亦然。返回的 set 支持此 set 支持的所有可选 set 操作。

如果试图在返回 set 的范围之外插入元素,则返回的 set 将抛出 IllegalArgumentException

等效于 subSet(fromElement, true, toElement, false)

指定者:
接口 NavigableSet<E> 中的 subSet
指定者:
接口 SortedSet<E> 中的 subSet
参数:
fromElement - 返回 set 的低端点(包括)
toElement - 返回 set 的高端点(不包括)
返回:
此 set 的部分视图,其元素的范围从 fromElement(包括)到 toElement(不包括)
抛出:
ClassCastException - 如果无法使用此 set 的比较器(如果 set 没有比较器,则使用自然顺序)比较 fromElementtoElement。如果 fromElementtoElement 不能与 set 中的当前元素进行比较,则实现可以(但不是必须)抛出此异常。
NullPointerException - 如果 fromElementtoElement 为 null
IllegalArgumentException - 如果 fromElement 大于 toElement;如果此 set 本身有范围限制,并且 fromElementtoElement 位于范围的边界之外

headSet

public NavigableSet<E> headSet(E toElement)
从接口 NavigableSet 复制的描述
返回此 set 的部分视图,其元素严格小于 toElement。返回的 set 受此 set 支持,所以在返回 set 中的更改将反映在此 set 中,反之亦然。返回的 set 支持此 set 支持的所有可选 set 操作。

如果试图在返回 set 的范围之外插入元素,则返回的 set 将抛出 IllegalArgumentException

等效于 headSet(toElement, false)

指定者:
接口 NavigableSet<E> 中的 headSet
指定者:
接口 SortedSet<E> 中的 headSet
参数:
toElement - 返回 set 的高端点(不包括)
返回:
此 set 的部分视图,其元素严格小于 toElement
抛出:
ClassCastException - 如果 toElement 与此 set 的比较器不兼容(如果 set 没有比较器;如果 toElement 没有实现 Comparable)。如果 toElement 不能与 set 中的当前元素进行比较,则实现可以(但不是必须)抛出此异常。
NullPointerException - 如果 toElement 为 null
IllegalArgumentException - 如果此 set 本身有范围限制,并且 toElement 位于范围的边界之外

tailSet

public NavigableSet<E> tailSet(E fromElement)
从接口 NavigableSet 复制的描述
返回此 set 的部分视图,其元素大于等于 fromElement。返回的 set 受此 set 支持,所以在返回 set 中的更改将反映在此 set 中,反之亦然。返回的 set 支持此 set 支持的所有可选 set 操作。

如果试图在返回 set 的范围之外插入元素,则返回的 set 将抛出 IllegalArgumentException

等效于 tailSet(fromElement, true)

指定者:
接口 NavigableSet<E> 中的 tailSet
指定者:
接口 SortedSet<E> 中的 tailSet
参数:
fromElement - 返回 set 的低端点(包括)
返回:
此 set 的部分视图,其元素大于等于 fromElement
抛出:
ClassCastException - 如果 fromElement 与此 set 的比较器不兼容(如果 set 没有比较器;如果 fromElement 没有实现 Comparable)。如果 fromElement 不能与 set 中的当前元素进行比较,则实现可以(但不是必须)抛出此异常。
NullPointerException - 如果 fromElement 为 null
IllegalArgumentException - 如果此 set 本身有范围限制,并且 fromElement 位于范围的边界之外

descendingSet

public NavigableSet<E> descendingSet()
返回此 set 中所包含元素的逆序视图。降序 set 受此 set 的支持,因此对此 set 的更改将反映在降序 set 中,反之亦然。

返回 set 的顺序等于 Collections.reverseOrder(comparator())。表达式 s.descendingSet().descendingSet() 返回的 s 视图基本等效于 s

指定者:
接口 NavigableSet<E> 中的 descendingSet
返回:
此 set 的逆序视图

JavaTM Platform
Standard Ed. 6

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策