CopyOnWriteArrayList的使用.docx

上传人:b****7 文档编号:24948132 上传时间:2023-06-03 格式:DOCX 页数:15 大小:19.73KB
下载 相关 举报
CopyOnWriteArrayList的使用.docx_第1页
第1页 / 共15页
CopyOnWriteArrayList的使用.docx_第2页
第2页 / 共15页
CopyOnWriteArrayList的使用.docx_第3页
第3页 / 共15页
CopyOnWriteArrayList的使用.docx_第4页
第4页 / 共15页
CopyOnWriteArrayList的使用.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

CopyOnWriteArrayList的使用.docx

《CopyOnWriteArrayList的使用.docx》由会员分享,可在线阅读,更多相关《CopyOnWriteArrayList的使用.docx(15页珍藏版)》请在冰豆网上搜索。

CopyOnWriteArrayList的使用.docx

CopyOnWriteArrayList的使用

java.util.concurrent 

类CopyOnWriteArraySet

java.lang.Object

java.util.AbstractCollection

java.util.AbstractSet

java.util.concurrent.CopyOnWriteArraySet

类型参数:

E -此collection中所保存元素的类型

所有已实现的接口:

Serializable, Iterable, Collection, Set

publicclassCopyOnWriteArraySet

extends

AbstractSet

implements

Serializable

对其所有操作使用内部 CopyOnWriteArrayList 的 Set。

因此,它共享以下相同的基本属性:

∙它最适合于具有以下特征的应用程序:

set大小通常保持很小,只读操作远多于可变操作,需要在遍历期间防止线程间的冲突。

∙它是线程安全的。

∙因为通常需要复制整个基础数组,所以可变操作(add、set 和 remove 等等)的开销很大。

∙迭代器不支持可变 remove 操作。

∙使用迭代器进行遍历的速度很快,并且不会与其他线程发生冲突。

在构造迭代器时,迭代器依赖于不变的数组快照。

示例用法。

 以下代码使用一个写时复制(copy-on-write)的set,以维护在状态更新时执行某项操作的一组Handler对象。

classHandler{voidhandle();...}

classX{

privatefinalCopyOnWriteArraySethandlers=newCopyOnWriteArraySet();

publicvoidaddHandler(Handlerh){handlers.add(h);}

privatelonginternalState;

privatesynchronizedvoidchangeState(){internalState=...;}

publicvoidupdate(){

changeState();

for(Handlerhandler:

handlers)

handler.handle();

}

}

此类是 JavaCollectionsFramework 的成员。

从以下版本开始:

1.5

另请参见:

CopyOnWriteArrayList, 序列化表格

构造方法摘要

CopyOnWriteArraySet() 

          创建一个空set。

CopyOnWriteArraySet(Collection

extends E> c) 

          创建一个包含指定collection所有元素的set。

 

方法摘要

 boolean

add(E e) 

          如果指定元素并不存在于此set中,则添加它。

 boolean

addAll(Collection

extends E> c) 

          如果此set中没有指定collection中的所有元素,则将它们都添加到此set中。

 void

clear() 

          移除此set中的所有元素。

 boolean

contains(Object o) 

          如果此set包含指定元素,则返回 true。

 boolean

containsAll(Collection

> c) 

          如果此set包含指定collection的所有元素,则返回 true。

 boolean

equals(Object o) 

          比较指定对象与此set的相等性。

 boolean

isEmpty() 

          如果此set不包含任何元素,则返回 true。

 Iterator

iterator() 

          返回按照元素添加顺序在此set中包含的元素上进行迭代的迭代器。

 boolean

remove(Object o) 

          如果指定元素存在于此set中,则将其移除。

 boolean

removeAll(Collection

> c) 

          移除此set中包含在指定collection中的所有元素。

 boolean

retainAll(Collection

> c) 

          仅保留此set中那些包含在指定collection中的元素。

 int

size() 

          返回此set中的元素数目。

 Object[]

toArray() 

          返回一个包含此set所有元素的数组。

T[]

toArray(T[] a) 

          返回一个包含此set所有元素的数组;返回数组的运行时类型是指定数组的类型。

 

从类java.util.AbstractSet 继承的方法

hashCode

 

从类java.util.AbstractCollection 继承的方法

toString

 

从类java.lang.Object 继承的方法

clone, finalize, getClass, notify, notifyAll, wait, wait, wait

 

构造方法详细信息

CopyOnWriteArraySet

publicCopyOnWriteArraySet()

创建一个空set。

CopyOnWriteArraySet

publicCopyOnWriteArraySet(Collection

extendsE> c)

创建一个包含指定collection所有元素的set。

参数:

c -最初包含元素的collection

抛出:

NullPointerException -如果指定collection为null

方法详细信息

size

publicintsize()

返回此set中的元素数目。

指定者:

接口 Collection 中的 size

指定者:

接口 Set 中的 size

指定者:

类 AbstractCollection 中的 size

返回:

此set中的元素数

isEmpty

publicbooleanisEmpty()

如果此set不包含任何元素,则返回 true。

指定者:

接口 Collection 中的 isEmpty

指定者:

接口 Set 中的 isEmpty

覆盖:

类 AbstractCollection 中的 isEmpty

返回:

如果此set不包含任何元素,则返回 true

contains

publicbooleancontains(Object o)

如果此set包含指定元素,则返回 true。

更确切地讲,当且仅当此set包含满足 (o==null?

e==null:

o.equals(e)) 的元素 e 时,返回 true。

指定者:

接口 Collection 中的 contains

指定者:

接口 Set 中的 contains

覆盖:

类 AbstractCollection 中的 contains

参数:

o -将测试其是否存在于此set中的元素

返回:

如果此set包含指定元素,则返回 true

toArray

publicObject[]toArray()

返回一个包含此set所有元素的数组。

如果此set对其迭代器返回的元素的顺序做出了某些保证,那么此方法必须以相同的顺序返回这些元素。

不维护对返回数组的任何引用,因而它将是“安全的”。

(换句话说,即使set受到数组的支持,此方法也必须分配一个新的数组)。

因此,调用这可以随意修改返回的数组。

此方法充当基于数组的API与基于collection的API之间的桥梁。

指定者:

接口 Collection 中的 toArray

指定者:

接口 Set 中的 toArray

覆盖:

类 AbstractCollection 中的 toArray

返回:

包含此set所有元素的数组

toArray

publicT[]toArray(T[] a)

返回一个包含此set所有元素的数组;返回数组的运行时类型是指定数组的类型。

如果指定的数组能容纳该set,则将set返回此处。

否则,将分配一个具有指定数组的运行时类型和此set大小的新数组。

如果指定的数组能容纳set,并有剩余的空间(即数组的元素比set多),那么会将接set尾部的元素设置为 null。

(仅 当调用者知道此set不包含任何null元素时,才可使用此方法来确定此set的长度。

如果此set对其迭代器返回的元素顺序做出了某些保证,那么此方法必须以相同的顺序返回这些元素。

像 toArray() 方法一样,此方法充当基于数组的API与基于collection的API之间的桥梁。

更进一步说,此方法允许对输出数组的运行时类型进行精确控制,在某些情况下,可以用来节省分配开销。

假定 x 是只包含字符串的一个已知set。

以下代码用来将该set转储到一个新分配的 String 数组:

String[]y=x.toArray(newString[0]);

注意, toArray(newObject[0]) 和 toArray() 在功能上是相同的。

指定者:

接口 Collection 中的 toArray

指定者:

接口 Set 中的 toArray

覆盖:

类 AbstractCollection 中的 toArray

参数:

存储此 -set元素的数组(如果该数组足够大);否则为此分配一个具有相同运行时类型的新数组

返回:

包含此set所有元素的数组

抛出:

ArrayStoreException -如果指定数组的运行时类型不是此set每个元素的运行时类型的超类型

NullPointerException -如果指定数组为null

clear

publicvoidclear()

移除此set中的所有元素。

在此调用返回之后,set将为空。

指定者:

接口 Collection 中的 clear

指定者:

接口 Set 中的 clear

覆盖:

类 AbstractCollection 中的 clear

remove

publicbooleanremove(Object o)

如果指定元素存在于此set中,则将其移除。

更确切地讲,如果此set中包含满足 (o==null?

e==null:

o.equals(e)) 的元素 e,则移除它。

如果此set包含指定元素(或者此set由于调用而发生更改),则返回 true。

(调用返回后,则此set便不再包含这样的元素。

指定者:

接口 Collection 中的 remove

指定者:

接口 Set 中的 remove

覆盖:

类 AbstractCollection 中的 remove

参数:

o -要从此set移除的对象(如果存在)

返回:

如果此set包含指定元素,则返回 true

add

publicbooleanadd(E e)

如果指定元素并不存在于此set中,则添加它。

更确切地讲,如果此set不包含满足 (e==null?

e2==null:

e.equals(e2)) 的元素 e2,则将指定元素 e 添加到此set中。

如果此set已经包含这样的元素,则该调用不改变此set并返回 false。

指定者:

接口 Collection 中的 add

指定者:

接口 Set 中的 add

覆盖:

类 AbstractCollection 中的 add

参数:

e -要添加到此set的元素

返回:

如果此set并未包含指定元素,则返回 true

containsAll

publicbooleancontainsAll(Collection

> c)

如果此set包含指定collection的所有元素,则返回 true。

如果指定的collection也是一个set,那么当该collection是此set的 子集 时,此方法返回 true。

指定者:

接口 Collection 中的 containsAll

指定者:

接口 Set 中的 containsAll

覆盖:

类 AbstractCollection 中的 containsAll

参数:

c -将被检查是否存在于此set的collection

返回:

如果此set包含指定collection的所有元素,则返回 true

抛出:

NullPointerException -如果指定collection为null

另请参见:

contains(Object)

addAll

publicbooleanaddAll(Collection

extendsE> c)

如果此set中没有指定collection中的所有元素,则将它们都添加到此set中。

如果指定的collection也是一个set,则 addAll 操作会实际修改此set,从而它的值是两个set的一个 并集。

如果指定collection在操作过程中被修改,则此操作的行为是不确定的。

指定者:

接口 Collection 中的 addAll

指定者:

接口 Set 中的 addAll

覆盖:

类 AbstractCollection 中的 addAll

参数:

c -包含将添加到此set中的元素的collection

返回:

如果此set由于调用而发生更改,则返回 true

抛出:

NullPointerException -如果指定collection为null

另请参见:

add(Object)

removeAll

publicbooleanremoveAll(Collection

> c)

移除此set中包含在指定collection中的所有元素。

如果指定的collection也是一个set,则此操作会实际修改此set,从而其值是两个set的一个 不对称差集。

指定者:

接口 Collection 中的 removeAll

指定者:

接口 Set 中的 removeAll

覆盖:

类 AbstractSet 中的 removeAll

参数:

c -包含将从此set中移除的元素的collection

返回:

如果此set由于调用而发生更改,则返回 true

抛出:

ClassCastException -如果此set的元素的类与指定collection不兼容(可选)

NullPointerException -如果此set包含一个null元素并且指定collection不允许使用null元素(可选),或者指定collection为null

另请参见:

remove(Object)

retainAll

publicbooleanretainAll(Collection

> c)

仅保留此set中那些包含在指定collection中的元素。

换句话说,移除此set中所有未包含在指定collection中的元素。

如果指定的collection也是一个set,则此操作会实际修改此set,这样其值是两个set的一个 交集。

指定者:

接口 Collection 中的 retainAll

指定者:

接口 Set 中的 retainAll

覆盖:

类 AbstractCollection 中的 retainAll

参数:

c -包含保留在此set中的元素的collection

返回:

如果此set由于调用而发生更改,则返回 true

抛出:

ClassCastException -如果此set的元素的类与指定collection不兼容(可选)

NullPointerException -如果此set包含一个null元素并且指定collection不允许使用null元素(可选),或者指定collection为null

另请参见:

remove(Object)

iterator

publicIteratoriterator()

返回按照元素添加顺序在此set中包含的元素上进行迭代的迭代器。

在构造迭代器时,返回的迭代器提供该set的状态的快照。

在遍历迭代器时无需同步。

该迭代器不 支持 remove 方法。

指定者:

接口 Iterable 中的 iterator

指定者:

接口 Collection 中的 iterator

指定者:

接口 Set 中的 iterator

指定者:

类 AbstractCollection 中的 iterator

返回:

在此set中的元素上进行迭代的迭代器

equals

publicbooleanequals(Object o)

比较指定对象与此set的相等性。

如果指定对象与此对象是同一对象,则返回 true,如果它也是一个 Set 并且在指定set上迭代的 迭代器所返回的元素序列与在此set上进行迭代迭代器所返回的元素的序列相同。

更确切地讲,如果两个迭代器返回相同的元素数,并且对于在指定set上进行迭代的迭代器返回的每个元素 e1 而言,都有一个由在此set上进行迭代的迭代器返回的元素 e2,且该元素满足 (e1==null?

e2==null:

e1.equals(e2)),则认为两个迭代器将返回相同的元素。

指定者:

接口 Collection 中的 equals

指定者:

接口 Set 中的 equals

覆盖:

类 AbstractSet 中的 equals

参数:

o -将与此set进行相等性比较的对象

返回:

如果指定的对象与此set相等,则返回 true

另请参见:

Object.hashCode(), Hashtable

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1