Java удалить строки массива

Как удалить строку в массиве java

Т.к. массивы в java не динамические, то необходимо создать новый массив и скопировать в него нужные строки :

int[][] arr = 1,2,3>, 4,5,6>, 7,8,9>>; int rowToDelete = 1; int rows = arr.length; int columns = arr[0].length; int[][] result = new int[rows - 1] [columns]; int j = 0; for(int i = 0; i  rows; i++)  if (i != rowToDelete)  result[j++] = arr[i]; > > System.out.println(Arrays.deepToString(result)); // => [[1, 2, 3], [7, 8, 9]] 

Источник

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

В некоторых случаях возникает необходимость в удалении элементов из Java-массива. Однако язык программирования Java не предоставляет для выполнения этой операции прямого метода. Тем не менее ряд способов всё же имеется. О них и поговорим.

Начнём с того, что в обычном массиве удаление осуществляется не очень удобно. То есть мы не можем просто взять и удалить ячейку из Java-массива. Зато можем обнулить значение этой ячейки.

 
public class Cat < private String name; public Cat(String name) < this.name = name; >public static void main(String[] args) < Cat[] cats = new Cat[3]; cats[0] = new Cat("Том"); cats[1] = new Cat("Вася"); cats[2] = new Cat("Мурка"); cats[1] = null; System.out.println(Arrays.toString(cats)); >@Override public String toString() < return "Cat'; > >

Итак, мы видим, что кот Вася благополучно обнулился. Однако при выполнении такой операции в Java-массиве остаётся «дыра», поскольку мы удаляем лишь содержимое ячейки, но не саму ячейку. То есть мы получаем пустую ячейку в середине массива, что не есть хорошо.

Что тут можно сделать? Например, переместить эту ячейку в самый конец массива, сдвинув другие элементы к началу:

 
public static void main(String[] args) < Cat[] cats = new Cat[4]; cats[0] = new Cat("Том"); cats[1] = new Cat("Вася"); cats[2] = new Cat("Мурка"); cats[3] = new Cat("Барсик"); cats[1] = null; for (int i = 2; i < cats.length-1; i++) < //выполняем перемещение элементов к началу, в результате чего пустая ячейка окажется в конце cats[i-1] = cats[i]; cats[i] = null; >System.out.println(Arrays.toString(cats)); >

Всё стало лучше, но, согласитесь, такое решение сложно назвать стабильным. Хотя бы потому, что каждый раз, когда нам надо будет удалить элемент из массива, нам придётся повторять вышеописанную операцию.

Использование ArrayList

Если гора не идёт к Магомету, Магомет идёт к горе. Если мы не можем удалить элемент в обычном массиве, мы можем преобразовать массив в структуру, позволяющую удалять элементы. А потом преобразовать эту структуру обратно в массив.

Выполнить вышеописанную схему нам поможет java.util.List или ArrayList. Дело в том, что в ArrayList реализован специальный метод, позволяющий удалять элементы — remove. В общем виде всё выглядит так:

 
String[] array = new String[]; List list = new ArrayList<>(Arrays.asList(array)); list.remove("foo"); // Creates a new array with the same size as the list and copies the list // elements to it. array = list.toArray(new String[list.size()]); System.out.println(Arrays.toString(array)); //[bar, baz]

Давайте теперь рассмотрим работу метода remove на наших котах:

 
public static void main(String[] args) < ArrayListcats = new ArrayList<>(); Cat tom = new Cat("Том"); Cat vasya = new Cat("Вася"); Cat murka = new Cat("Мурка"); Cat barsik = new Cat("Барсик"); cats.add(tom); cats.add(vasya); cats.add(murka); cats.add(barsik); System.out.println(cats.toString()); cats.remove(1); System.out.println(cats.toString()); >

Итак, мы передали в метод индекс нашего объекта, в результате чего он был удален.

Тут следует отметить следующие особенности метода remove() : — он не оставляет так называемых «дыр» — в нём реализована логика сдвига элементов, если мы удаляем элемент из середины. Вот вывод предыдущего кода:

 
[Cat, Cat, Cat, Cat] [Cat, Cat, Cat]

То есть после удаления одного кота, остальные были передвинуты, и пробелов не осталось.

Кроме того, remove способен удалять объект не только по индексу, но и по ссылке:

 
public static void main(String[] args) < ArrayListcats = new ArrayList<>(); Cat tom = new Cat("Том"); Cat vasya = new Cat("Вася"); Cat murka = new Cat("Мурка"); Cat barsik = new Cat("Барсик"); cats.add(tom); cats.add(vasya); cats.add(murka); cats.add(barsik); System.out.println(cats.toString()); cats.remove(murka); System.out.println(cats.toString()); >
 
[Cat, Cat, Cat, Cat] [Cat, Cat, Cat]

Однако на просторах сети можно найти и другие способы удаления нужных элементов из массива.

Используем System.arraycopy

Мы можем просто создать копию исходного массива с помощью System.arraycopy(), удалив таким нехитрым способом соответствующий элемент:

 
int[] array = new int[] < 1, 2, 3, 4 >; // Original array. int[] result = new int[array.length - 1]; // Array which will contain the result. int index = 1; // Remove the value "2". // Copy the elements at the left of the index. System.arraycopy(array, 0, result, 0, index); // Copy the elements at the right of the index. System.arraycopy(array, index + 1, result, index, array.length - index - 1); System.out.println(Arrays.toString(result)); //[1, 3, 4]

Используем Apache Commons Lang

Последний способ, о котором стоит упомянуть, — применение библиотеки Apache Commons Lang и статического метода removeElement() класса ArrayUtils:

 
int[] array = new int[]; array = ArrayUtils.removeElement(array, 2); //remove first occurrence of 2 System.out.println(Arrays.toString(array)); //[1, 3, 4]

Apache Commons предоставляет нам библиотеку с именем org.apache.commons.lang3. Добавить библиотеку в ваш проект можно с помощью следующей maven-зависимости:

 
  org.apache.commons commons-lang3 3.0   

Данный пакет предоставляет класс ArrayUtils. Используя метод remove() этого класса, можно удалять элементы. Рассмотрим это на примере удаления повторяющихся элементов в массиве Java. Для обнаружения дублей надо сравнить каждый элемент Java-массива с оставшимися, для чего можно использовать 2 вложенных цикла.

 
import java.util.Arrays; import java.util.Scanner; import org.apache.commons.lang3.ArrayUtils; public class DeleteDuplicate < public static void main(String args[]) < Scanner sc = new Scanner(System.in); System.out.println("Enter the size of the array that is to be created::"); int size = sc.nextInt(); int[] myArray = new int[size]; System.out.println("Enter the elements of the array ::"); for(int i=0; iSystem.out.println("The array created is ::"+Arrays.toString(myArray)); for(int i=0; i > > System.out.println("Array after removing elements ::"+Arrays.toString(myArray)); > >

Вот, как это будет работать:

 
Enter the size of the array that is to be created :: 6 Enter the elements of the array :: 232 232 65 47 89 42 The array created is :: [232, 232, 65, 47, 89, 42] Array after removing elements :: [232, 65, 47, 89, 42]

На этом всё, надеемся, предоставленная информация была полезной!

Источник

How to Remove Array Elements in Java

How to Remove Array Elements in Java

While we believe that this content benefits our community, we have not yet thoroughly reviewed it. If you have any suggestions for improvements, please let us know by clicking the “report an issue“ button at the bottom of the tutorial.

When we create an array in Java, we specify its data type and size. This is used by JVM to allocates the necessary memory for array elements. There are no specific methods to remove elements from the array.

1. Removing an element from Array using for loop

This method requires the creation of a new array. We can use for loop to populate the new array without the element we want to remove.

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;iarr.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)); > > 

Arr Delete

The code removes the element at index 3. This method simply copies all the elements except the one at index 3 to a new array.

2. Deleting an array element by its value

Unlike the previous case, this code will delete the element based on its value. This will not work with duplicates since the size of the array after deletion has to be known.

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;iarr.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 Delete based on value

The only difference between this and the previous case is arr[i]!=j in the if condition in place of i!=j .

3. Deleting element by its value when the array contains duplicates

Performing deletion based on the value in case of duplicates requires using ArrayList. Since ArrayList doesn’t require the size to be now in advance, it allows us to expand dynamically.

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>; ArrayListInteger> arr_new = new ArrayList>(); int j=3; for(int i=0;iarr.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); > > 

array-deletion-duplicates

4. Shifting elements in the same array

This method involves shifting the elements in the same array. Shifting of elements replaces the element to be deleted by the element at the next index.

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)); > > 

Shifting Elements In Array

Count variable indicates the number of elements deleted. This variable is essential to keep a track of index till which the array should be printed. This method takes care of duplicates as well.

5. Deleting elements from ArrayList

ArrayList is backed by arrays. The deletion of an element in the ArrayList is straight forward. It requires one simple call to an inbuilt function.

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>; ArrayListInteger> arr_new = new ArrayListInteger>(); 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); > > 

ArrayList Deletion

A call to the remove(i) function removes the element at index i. Deletion in ArrayLists is relatively easier as compared to Arrays.

Conclusion

We saw some examples of deleting elements in an array using different methods. The difference between the deletion of an element in an Array and an ArrayList is clearly evident. If deletion is to be performed again and again then ArrayList should be used to benefit from its inbuilt functions. Same is the case with the addition of elements to an array. ArrayList due to its dynamic nature provides easier and less cumbersome ways to alter an array.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases. Learn more about us

Источник

Удалить пустые строки из списка строк в Java

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

1. Использование List.removeAll() метод

The removeAll() метод обычно используется для удаления из списка всех элементов, содержащихся в указанной коллекции. Например, следующий код удаляет все пустые или нулевые строки из списка строк:

результат:

[A, B, C, D]

2. Использование List.removeIf() метод

Java 8 представила несколько улучшений для Collection интерфейс, как и removeIf() метод, который удаляет все элементы из списка, удовлетворяющие заданному предикату.

List collection = new ArrayList <> ( Arrays . asList ( "A" , null , "B" , null , "C" , "" , "D" ) ) ;

результат:

[A, B, C, D]

Приведенное выше решение делает два вызова removeIf() метод удаления нулей и пустых значений. Вы можете использовать Apache Commons Lang StringUtils.isEmpty() вместо этого метод, который проверяет, является ли строка пустой или нулевой.

результат:

[A, B, C, D]

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

List collection = new ArrayList <> ( Arrays . asList ( "A" , null , "B" , null , "C" , "" , "D" ) ) ;

результат:

[A, B, C, D]

3. Использование Stream.filter() метод

Вот версия, использующая Java 8 Streams, которая фильтрует коллекцию, применяя указанные Predicate к каждому элементу. Если предикат возвращает false, он удаляет элемент. Вот рабочий пример:

результат:

[A, B, C, D]

4. Использование итератора

Другим решением является перебор элементов списка и удаление текущего элемента, если он имеет значение null и равен пустой строке. Вы должны использовать собственный итератор remove() метод, чтобы избежать ConcurrentModificationException . Видеть эта почта для получения более подробной информации об этом поведении.

Источник

Читайте также:  Ssh connection with python
Оцените статью