【實用小代碼】 --- 循環中刪除數組中指定元素的正確姿勢

今天寫一個前端邏輯的時候碰到了這種情況,並在前端小姐姐面前裝了一把☺☺☺


並且這個問題貌似我在實際開發中碰到的次數還是挺多的,所以記錄一下,但是用的語言是java —》 重要的是思想!!!


1 抽象出來的題目

假設有如下數組,數組中的元素我們事先並不知道,現在要求在一個循環內將B和E刪掉。
在這裏插入圖片描述


2 錯誤的示範

會出問題的code

public static void main(String[] args) {

     List<String> list = new ArrayList<>(5);
     list.add("C");
     list.add("A");
     list.add("B");
     list.add("E");
     list.add("D");

     for (int i = 0; i < list.size(); i++) {
         if ("B".equals(list.get(i)) || "E".equals(list.get(i))) {
             list.remove(i);
         }
     }
     System.out.println(list);
 }

出問題的原因 (相信原因大家肯定都知道,我這裏簡單描述一下):
在這裏插入圖片描述


輸出結果
在這裏插入圖片描述


3 正確的答案

不會出問題的code

public static void main(String[] args) {

    List<String> list = new ArrayList<>(5);
    list.add("C");
    list.add("A");
    list.add("B");
    list.add("E");
    list.add("D");
    //注意i的初始值一定爲list.size() - 1, 因爲這纔是數組中的最後一個數據
    //判斷條件一定是i>=0,不能是i>0, 因爲i = 0 也要參與邏輯的運算
    for (int i = list.size() - 1; i >= 0; i--) {
        if ("B".equals(list.get(i)) || "E".equals(list.get(i))) {
            list.remove(i);
        }
    }
    System.out.println(list);
}

不會出問題的原因
在這裏插入圖片描述


輸出結果
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章