Удаление элементов из массива Java

Долго сидел, не могу понят почему не все элементы удаляются . Нужно что-бы только Java остался , а остаются С++ и JavaScript. Объясните пожалуйста


 public class Solution {
 public static ArrayList<String> programmingLanguages = new ArrayList<>(Arrays.asList("C", "C++", "Python", "JavaScript", "Ruby", "Java", "Pascal"));
    public static void main(String[] args) {
         for(int i = 0; i < programmingLanguages.size(); i++){
             if(programmingLanguages.get(i) != ("Java")){
                 programmingLanguages.remove(i);
             }
        }
        System.out.print(programmingLanguages);
    }
}



Ответы (1 шт):

Автор решения: wigravy

Вы можете использовать для удаления такую классную вещь как removeIf Весь Ваш код можно изменить на:

public class Solution {
 public static ArrayList<String> programmingLanguages = new ArrayList<>(Arrays.asList("C", "C++", "Python", "JavaScript", "Ruby", "Java", "Pascal"));
    public static void main(String[] args) {
        programmingLanguages.removeIf(s -> !s.equals("Java"));

        System.out.print(programmingLanguages);
    }
}

ps Всё дело в том как удаляются элементы. Удаляя элементы из листа вы сдвигаете все остальные элементы влево. Таким образом при удалении элемента "C", элемент "C++" встает на 0 позицию и избегает проверки вашим циклом.

→ Ссылка