学习由 Maurice Naftalin、Philip Wadler 撰写的 Java Generics and Collection 书,我在 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()
适用于后阵列,对吗?
任何闪存都非常感谢,谢谢大家。