Удаление всего массива java

Массивы в Java

Массив в Java – это набор элементов одного типа, обратиться к которым можно по индексу.

Элементы массивов в Java расположены друг за другом в памяти компьютера. Ниже разбирается пример массива в Java.

Объявление массива в Java

Объявим массив, для хранения элементов типа int:

Здесь объявлена переменная arr, которая является массивом. Чтоб использовать эту переменную нужно её определить.

Определение массива в Java

Для определения массива в Java следует указать его длину, т.е. количество элементов, которые могут в нём храниться:

В нашем массиве бедет храниться 5 элементов.

Массив — это набор элементов. К каждому элементу массива можно обратиться по его номеру. Номер принято называть индексом. Нумерация элементов массива в Java идёт с нуля.

Как загрузить элементы в массив?

Присвоим значение первому элементу массива, а первый элемент имеет индекс ноль:

Присвоим значение второму элементу массива, а второй элемент имеет индекс один:

и так далее. Обычно это делают в цикле:

Можно при объявлении массива сразу загрузить в него значения:

количество элементов здесь равно 5-ти, т.е. нет необходимости указать число элементов, оно будет определено автоматически.

Как получить элементы из массива?

К каждому элементу массива можно обратиться по его номеру. Чтоб получить элемент массива, надо указать имя массива и индекс элемента:

это первый элемент массива, ведь у первого элемета индекс ноль.

Присвоим значение третьего элемента массива переменной int a:

Выведем в цикле все элементы массива (переберем массив):

Упрощенный вариант цикла для вывода массива таков:

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

Удалить массив в Java можно так:

Как получить длину массива в Java?

Длину массива в Java получаем так:

Как получить первый элемент массива в Java?

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

Как в Java задать массив переменной длины?

Как в Java задать массив переменной длины? Никак. Когда вы определяете массив, тогда и задаёте его длину, изменить её в дальнейшем нельзя. В таких случаях используют коллекции, например: Vector, ArrayList и др.

Итак, перемнной длина массива быть не может. Но можно использовать переменную при определении массива. Если так:

то получим ошибку, длина массива не может быть переменной.

Теперь нормально. Если после определения массива изменить переменную cd, то это не повлияет на массив, т.е. его длина не изменится. Пример:

Максимальный индекс нашего массива равен 9-ти. Изменение значения переменной cd не влияет на массив, ведь он уже определен и его длина есть константа.

Переменные можно использовать для обращения к элементам массива:

Массив символов в Java

Пример массива символов в Java и его вывода:

Как заполнить массив в Java?

Заполнить массив можно с помощью статического метода fill:

Как отсортировать массив в Java?

Пример сортировки массива в Java:

Статическая функция sort сортирует элементы массива в порядке возрастания.

Пример сортировки массив, Java

Получаем:

Как найти элемент в массиве в Java?

Найдем индекс элемента, равного 4-м:

Источник

Как удалить элемент массива в 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]

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

Источник

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

Мне 4 дня на Java, и из учебных пособий, которые я искал, инструкторы сосредоточили много усилий на объяснении, как выделить двумерный массив (например) следующим образом:

. но я не нашел ничего, что объясняет, как их удалить.

Исходя из того, что происходит с памятью, переменная fooArray будет указывать на блок памяти в куче, в котором есть 2 элемента. Каждый из элементов также указывает на другой блок в куче, который имеет 3 элемента.

При этом я могу просто сослаться на первый блок элементов, и сборщик мусора выполнит эту работу?

Или мне нужно обнулить каждый из созданных элементов Foo?

Foo[1][1] = null; Foo[1][2] = null; Foo[1][3] = null; .

ОТВЕТЫ

Ответ 1

объяснение

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

  1. пусть переменная выходит из области видимости или
  2. назначить null
  3. или любой другой экземпляр к нему.

Тогда на экземпляр массива (а также на его подмассивы) больше не ссылаются, и сборщик мусора в конце концов удалит его.

Рекомендации

Чтобы понять, почему переназначение внешнего массива достаточно для удаления внутренних массивов, вам необходимо понять, как на них ссылаются. Опять же, сборщик мусора может удалить все, что недоступно. Итак, давайте посмотрим на массив, такой как:

У нас есть 4 экземпляра массива. Один имеет тип int[][] и три типа int[] . Также у нас есть одна переменная outer . На экземпляры ссылаются следующим образом:

Таким образом, удаляя outer , никто больше не ссылается на int[][] . Сборщик мусора теперь может удалить его. Но это также удаляет все ссылки на внутренние массивы, поэтому сборщик мусора теперь также может их удалять.

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

int[][] outer = , , >; int[] thirdInner = outer[2]; other = null; // remove the reference 
outer --> null ___> | int[][] ---|---> | |______> | thirdInner _______________| 

Таким образом, сборщик мусора теперь будет удалять внешний массив int[][] , который также удаляет все ссылки на первый и второй внутренний массив. Но на третий по-прежнему ссылается thirdInner , поэтому после сборки мусора мы имеем:

Ответ 2

В какой-то момент, после того как массив выйдет из области видимости, сборщик мусора освободит память, если на него не будет других ссылок.

Если вы хотите обнулить вашу ссылку до того, как переменная выйдет из области видимости (имейте в виду, что если какой-то другой код имеет эту ссылку, она не будет собирать мусор):

Foo[][] fooArray = new Foo[2][3]; . // this will null the reference to the array fooArray = null; 

Ответ 3

В отличие от C, Java обеспечивает автоматическую сборку мусора, которая очищает массив для вас, когда он становится недоступным (то есть выходит из области видимости). Если вы хотите, вы можете сделать массив пустым, чтобы область памяти стала недоступной.

 Foo[][] fooArray = new Foo[2][3]; . . . fooArray = null; System.gc(); 

Этот вызов gc не гарантирует, что JVM запустит сборщик мусора, но предполагает, что виртуальная машина Java затрачивает усилия на утилизацию неиспользуемых объектов, чтобы сделать доступной память, которую они занимают, для быстрого повторного использования. Когда управление возвращается из вызова метода, виртуальная машина Java сделала все возможное, чтобы освободить пространство от всех отброшенных объектов

Источник

Читайте также:  Желто коричневый цвет html
Оцените статью