Поиск по сайту:

Как удалить элементы массива в Java


Когда мы создаем массив в Java, мы указываем его тип данных и размер. Это используется JVM для выделения необходимой памяти для элементов массива. Не существует специальных методов удаления элементов из массива.

1. Удаление элемента из массива с помощью цикла for

Этот метод требует создания нового массива. Мы можем использовать цикл for для заполнения нового массива без элемента, который мы хотим удалить.

package com.journaldev.java;

import java.util.Arrays;

public class Main {

    public static void main(String[] args) {
        int[] arr = new int[]{1,2,3,4,5};
        int[] arr_new = new int[arr.length-1];
        int j=3;
        for(int i=0, k=0;i<arr.length;i++){
            if(i!=j){
                arr_new[k]=arr[i];
                k++;
            }
        }
        System.out.println("Before deletion :" + Arrays.toString(arr));
        System.out.println("After deletion :" + Arrays.toString(arr_new));

    }
}

Код удаляет элемент с индексом 3. Этот метод просто копирует все элементы, кроме элемента с индексом 3, в новый массив.

2. Удаление элемента массива по его значению

В отличие от предыдущего случая, этот код удалит элемент на основе его значения. Это не будет работать с дубликатами, так как должен быть известен размер массива после удаления.

package com.journaldev.java;
import java.util.Arrays;

public class Main {

    public static void main(String[] args) {
        int[] arr = new int[]{1,2,3,4,5};
        int[] arr_new = new int[arr.length-1];
        int j=3;
        for(int i=0, k=0;i<arr.length;i++){
            if(arr[i]!=j){
                arr_new[k]=arr[i];
                k++;
            }
        }
        System.out.println("Before deletion :" + Arrays.toString(arr));
        System.out.println("After deletion :" + Arrays.toString(arr_new));

    }
}

Единственная разница между этим и предыдущим случаем заключается в arr[i]!=j в условии if вместо i!=j.

3. Удаление элемента по его значению, когда массив содержит дубликаты

Выполнение удаления на основе значения в случае дублирования требует использования ArrayList. Поскольку ArrayList не требует указания размера заранее, он позволяет нам динамически расширяться.

package com.journaldev.java;

import java.util.ArrayList;
import java.util.Arrays;

public class Main {

    public static void main(String[] args) {
        int[] arr = new int[]{1,3,3,4,5};
        ArrayList<Integer> arr_new = new ArrayList<>();
        int j=3;
        for(int i=0;i<arr.length;i++){
            if(arr[i]!=j){
                arr_new.add(arr[i]);

            }
        }
        System.out.println("Before deletion :" + Arrays.toString(arr));
        System.out.println("After deletion :" +arr_new);

    }
}

4. Сдвиг элементов в одном массиве

Этот метод включает в себя сдвиг элементов в одном и том же массиве. Сдвиг элементов заменяет элемент, подлежащий удалению, элементом со следующим индексом.

package com.journaldev.java;
import java.util.Arrays;
public class Main {

    public static void main(String[] args) {
        int[] arr = new int[]{1,3,3,4,5};
        int j=3;
        System.out.println("Before deletion :" + Arrays.toString(arr));
        int count =0;
        for(int i = 0; i < arr.length; i++){
            if(arr[i] == j){
                count++;

                // shifting elements
                for(int k = i; k < arr.length - 1; k++){
                    arr[k] = arr[k+1];
                }
                i--;
               // break;
            }
        }

        System.out.print("After Deletion :" );
        for(int i = 0; i < arr.length-count; i++){
            System.out.print(" " + arr[i]);
        }
        System.out.println();
        System.out.println("Whole array :" + Arrays.toString(arr));

    }
}

Переменная Count указывает количество удаленных элементов. Эта переменная необходима для отслеживания индекса, по которому должен быть напечатан массив. Этот метод также работает с дубликатами.

5. Удаление элементов из ArrayList

ArrayList поддерживается массивами. Удаление элемента в ArrayList выполняется прямолинейно. Для этого требуется один простой вызов встроенной функции.

package com.journaldev.java;
import java.util.ArrayList;
import java.util.Arrays;
public class Main {

    public static void main(String[] args) {
        int[] arr = new int[]{1,3,3,4,5};
        ArrayList<Integer> arr_new = new ArrayList<Integer>();
        for (int i : arr)
        {
            arr_new.add(i);
        }
        arr_new.remove(3);
        System.out.println("Before deletion :" + Arrays.toString(arr));
        System.out.println("After Deletion:" + arr_new);
    }
}

Вызов функции remove(i) удаляет элемент с индексом i. Удаление в ArrayLists относительно проще по сравнению с массивами.

Заключение

Мы видели несколько примеров удаления элементов в массиве с использованием различных методов. Разница между удалением элемента в Array и ArrayList очевидна. Если удаление должно выполняться снова и снова, следует использовать ArrayList, чтобы извлечь выгоду из его встроенных функций. То же самое и с добавлением элементов в массив. ArrayList благодаря своей динамической природе предоставляет более простые и менее громоздкие способы изменения массива.