Удаление элементов из массива 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 позицию и избегает проверки вашим циклом.