在語句if ("b".equals(list.get(i--))) 中,錯吧get(i)寫成了get(i--),在運行時cpu飆到快100%。按照ArrayList的索引遍歷集合,當i從0開始時,經(jīng)過get(i--)后,在remove(i--)處,相當于remove(-1),那么為什么不報錯呢?使用的是eclipse
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("b");
list.add("c");
list.add("d");
//1. 普通for循環(huán)刪除集合元素
for (int i = 0 ; i < list.size();i++) {
if ("b".equals(list.get(i--))) { //錯把 get(i) 寫為get(i--)
list.remove(i--);
System.out.println("已經(jīng)刪除b");
}
}
System.out.println(list);
4 回答

蝴蝶刀刀
TA貢獻1801條經(jīng)驗 獲得超8個贊
for (int i = 0 ; i < list.size();i++) {
if ("b".equals(list.get(i--))) { //list.get(i--)值為'a',執(zhí)行完以后i的值為-1,在下一個循環(huán)中加上步長,i又變成0
list.remove(i--); // 永遠沒有機會執(zhí)行
System.out.println("已經(jīng)刪除b");
}
}
添加回答
舉報
0/150
提交
取消