異常プラス原理を併記修正(面接)

1668 ワード

同時修正異常
ConcerentModificationException異常名称:同時修正異常
発生原因:
重ね合わせを使用しながら、元のセットを使用して要素を変更します.
解決策:
1.ローズマリーを使用しないで巡回して、普通のforを使って巡回します.2.ローズマリーを使いますが、リストローズマリーを使います.3.toAray
foreachは集合と配列の専用のディレクターです.
		Collection c=new ArrayList();
		c.add("asd");
		c.add("zxc");
		c.add("qwe");
		c.add("ert");
		Iterator i=c.iterator();
		//  ,          ,       ,       
	/*	while(i.hasNext()){
			String s=(String)i.next();
			if(s.equals("zxc")){
				c.remove("qwe");
			}
		}
		*/
	//    
	
		for (Object obj : c) {
			String s = (String) obj;
			if (s.equals("zxc")) {
				c.remove("qwe");
			}
合併異常原理:
 ArrayList :  trimToSize  :
public void trimToSize() {
        modCount++;//          
        if (size < elementData.length) {
            elementData = (size == 0)
              ? EMPTY_ELEMENTDATA
              : Arrays.copyOf(elementData, size);
        }
    }
          :
    private class Itr implements Iterator {
        int cursor;       // index of next element to return
        int lastRet = -1; // index of last element returned; -1 if no such
        int expectedModCount = modCount;
         final void checkForComodification() {
            if (modCount != expectedModCount)
                throw new ConcurrentModificationException();
        }
}
modCount/は、集合において修正された回数を記録するexpectedModCount/は、その変更された回数をシーケンサに記録するという2つのパラメータが、反復時にmodCountフィールドの変更を引き起こす動作を使用する場合、next、remove、previous、Set、addは、ローズマリーを使って再び集合操作を行うと、2つの数が異なる可能性があります.(exceptedModCountとmodCountが同じではない時に例外を投げます.)もしあなたがローズマリーだけを使うなら、この二つの数の関係は考慮しなくてもいいです.