学习由 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()适用于后阵列,对吗?
任何闪存都非常感谢,谢谢大家。