異常プラス原理を併記修正(面接)
1668 ワード
同時修正異常
ConcerentModificationException異常名称:同時修正異常
発生原因:
重ね合わせを使用しながら、元のセットを使用して要素を変更します.
解決策:
1.ローズマリーを使用しないで巡回して、普通のforを使って巡回します.2.ローズマリーを使いますが、リストローズマリーを使います.3.toAray
foreachは集合と配列の専用のディレクターです.
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が同じではない時に例外を投げます.)もしあなたがローズマリーだけを使うなら、この二つの数の関係は考慮しなくてもいいです.