Javaでループ内でリストの要素を削除する方法

https://hacknote.jp/archives/16155/

https://hacknote.jp/archives/3463/

あたりでも話題になっています。

リストを削除しつつlistの要素をgetしょうとすると

java.lang.IndexOutOfBoundsException

が発生します。

NG

List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");

for(i = 0; i < list.size(); i ++){
    String hoge = list.get(i);
    if(!hoge.startsWith("a")){
        list.remove(hoge);
    }
}

OK

List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");

Iterator<String> i = list.iterator();
        while(i.hasNext()){
            String hoge = i.next();
            if(!hoge.startsWith("a")){
                i.remove();
            }
        }