gpt4 book ai didi

java - 修改 CopyOnWriteArraySet 时得到 UnsupportedOperationException

转载 作者:行者123 更新时间:2023-12-04 05:17:41 25 4
gpt4 key购买 nike

莫里斯·纳夫塔林 (Maurice Naftalin) 和菲利普·瓦德勒 (Philip Wadler) 所著的《学习 Java 泛型和集合》一书,我在 CopyOnWriteArraySet 部分离开了,在学习的同时尝试练习以使其牢记在心,但是我遇到了一个问题,让我来揭示我的琐碎代码:

  CopyOnWriteArrayList<Character> modifiableSet = new CopyOnWriteArrayList<Character>(); 
modifiableSet.add('a');modifiableSet.add('d');
for(Character ch:modifiableSet){
if(ch.equals('d')){
modifiableSet.remove(ch); // compiler neglects this, as expected,
// since CopyOnWriteArraySet is synchronous
}
}

for(Iterator<Character> its = modifiableSet.iterator();its.hasNext();){
Character firstElement = its.next();
if(firstElement.equals('a'))its.remove();// compiler does not give a damn here
// since CopyOnWriteArrayList is synchronous java.lang.UnsupportedOperationException
// surprisingly, wondering If CopyOnWriteArrayList is synchronous,
// why the compiler shouts here ?
}

到目前为止我的大脑明白,每当修改发生在 CopyOnWriteArraySet ,使用新更改创建的新支持数组,问题是,是否通过 CopyOnWriteArraySet通过 iterator()发生在后阵或前阵上,如果说前阵方便的话,对我来说听起来很合理 CopyOnWriteArraySet.remove()适用于前端阵列,和 CopyOnWriteArraySet.iterator().remove()适用于支持数组,我说得对吗?

到目前为止,任何闪存都值得赞赏,谢谢大家。

最佳答案

CopyOnWriteArraySet API 对此非常清楚

•Iterators do not support the mutative remove operation. 

这是因为 CopyOnWriteArraySet 的迭代器“依赖于构建迭代器时数组的不变快照”。

关于java - 修改 CopyOnWriteArraySet 时得到 UnsupportedOperationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14050291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com