Как удалить элементы массива в 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 благодаря своей динамической природе предоставляет более простые и менее громоздкие способы изменения массива.