アセンブリ要素の問題の削除
2113 ワード
次は私がプロジェクトで出会ったよくある集合でエラーを削除し、最初は自分も間違いを繰り返していました.
簡単に述べるために、まずテストクラスを書いて、それからテストに参加して、どのような状況があなたも問題があるかを見て、みんなが問題を干して、そして問題の分析を出すことを歓迎します
問題1:強化forサイクルlist項目、javaを削除します.util.反復除去はサポートされていません.
問題2:size自体が変化し,i比較の値に問題がある
問題3:問題は相変わらずlistサイズは削除自体によって問題が変化し、
総合的に正しい方法を与える
問題4:強化されたforループが呼び出しの反復器である以上、問題は同時修正報の誤りによるものであるため、この問題を同時ツールセットで回避できるかどうか、テストして解決する.
簡単に述べるために、まずテストクラスを書いて、それからテストに参加して、どのような状況があなたも問題があるかを見て、みんなが問題を干して、そして問題の分析を出すことを歓迎します
public class TestList {
private List<Object> list = null;
@Before
public void init() {
list = new ArrayList<Object>();
for (int i = 0; i < 10; i++) {
list.add(new Object());
}
}
@After
public void print(){
System.out.println(list.size());
for(Object str:list){
System.out.println(str);
}
}
}
問題1:強化forサイクルlist項目、javaを削除します.util.反復除去はサポートされていません.
@Test
public void testForLoop01() {
/**
* for
* java.util.ConcurrentModificationException
*/
for (Object str : list) {
list.remove(str);
}
}
問題2:size自体が変化し,i比較の値に問題がある
@Test
public void testForLoop02(){
/**
* size
*/
for(int i=0;i<list.size();i++){
list.remove(i);
}
}
問題3:問題は相変わらずlistサイズは削除自体によって問題が変化し、
@Test
public void testForLoop03(){
int length=list.size();
for(int i=0;i<length;i++){
list.remove(i);
}
}
総合的に正しい方法を与える
@Test
public void testForLoop04(){
int length=list.size();
for(int i=length-1;i>0;i--){
list.remove(i);
}
}
問題4:強化されたforループが呼び出しの反復器である以上、問題は同時修正報の誤りによるものであるため、この問題を同時ツールセットで回避できるかどうか、テストして解決する.
@Test
public void testCurrentCollection(){
/**
* ,
*/
list=new CopyOnWriteArrayList<Object>();
for (int i = 0; i < 10; i++) {
list.add(new Object());
}
for (Object str : list) {
list.remove(str);
}
}