Добавление элемента в массив Java против ArrayList
В этом руководстве мы кратко рассмотрим сходства и различия в распределении памяти между массивами Java и стандартным ArrayList . Кроме того, мы увидим, как добавлять и вставлять элементы в массив и ArrayList .
2. Массивы Java и ArrayList
Массив Java — это базовая структура данных, предоставляемая языком. Напротив, ArrayList является реализацией интерфейса List , поддерживаемой массивом, и предоставляется в Java Collections Framework.
2.1. Доступ и изменение элементов
Мы можем получить доступ к элементам массива и изменить их, используя нотацию с квадратными скобками:
System.out.println(anArray[1]); anArray[1] = 4;
С другой стороны, ArrayList имеет набор методов для доступа и изменения элементов:
int n = anArrayList.get(1); anArrayList.set(1, 4);
2.2. Фиксированный и динамический размер
Массив и ArrayList выделяют память в куче аналогичным образом, но разница заключается в том, что массив имеет фиксированный размер, а размер ArrayList динамически увеличивается.
Поскольку массив Java имеет фиксированный размер, нам необходимо указать размер при его создании. Невозможно увеличить размер массива после его создания. Вместо этого нам нужно создать новый массив с измененным размером и скопировать все элементы из предыдущего массива.
ArrayList — это реализация интерфейса List с изменяемым размером массива , то есть ArrayList динамически увеличивается по мере добавления к нему элементов. Когда количество текущих элементов (включая новый элемент, добавляемый в ArrayList ) превышает максимальный размер его базового массива, тогда ArrayList увеличивает размер базового массива.
Стратегия роста базового массива зависит от реализации ArrayList . Однако, поскольку размер базового массива нельзя увеличить динамически, создается новый массив, а элементы старого массива копируются в новый массив.
Операция добавления имеет постоянную амортизированную временную стоимость. Другими словами, добавление n элементов в ArrayList требует O(n) времени.
2.3. Типы элементов
Массив может содержать как примитивные, так и непримитивные типы данных, в зависимости от определения массива. Однако ArrayList может содержать только не примитивные типы данных « .
Когда мы вставляем элементы с примитивными типами данных в ArrayList , компилятор Java автоматически преобразует примитивный тип данных в соответствующий класс-оболочку объекта.
Давайте теперь посмотрим, как добавлять и вставлять элементы в массивы Java и ArrayList .
3. Добавление элемента
Как мы уже видели, массивы имеют фиксированный размер.
Итак, чтобы добавить элемент, во-первых, нам нужно объявить новый массив, который больше старого массива, и скопировать элементы из старого массива во вновь созданный массив. После этого мы можем добавить новый элемент в этот вновь созданный массив.
Давайте посмотрим на его реализацию на Java без использования каких-либо служебных классов:
public Integer[] addElementUsingPureJava(Integer[] srcArray, int elementToAdd) Integer[] destArray = new Integer[srcArray.length+1]; for(int i = 0; i srcArray.length; i++) destArray[i] = srcArray[i]; > destArray[destArray.length - 1] = elementToAdd; return destArray; >
С другой стороны, класс Arrays предоставляет служебный метод copyOf() , который помогает создать новый массив большего размера и скопировать все элементы из старого массива:
int[] destArray = Arrays.copyOf(srcArray, srcArray.length + 1);
Как только мы создали новый массив, мы можем легко добавить новый элемент в массив:
destArray[destArray.length - 1] = elementToAdd;
С другой стороны, добавить элемент в ArrayList довольно просто :
anArrayList.add(newElement);
4. Вставка элемента по индексу
Вставка элемента по заданному индексу без потери ранее добавленных элементов — непростая задача в массивах.
Прежде всего, если массив уже содержит количество элементов, равное его размеру, то нам сначала нужно создать новый массив большего размера и скопировать элементы в новый массив.
Кроме того, нам нужно сдвинуть все элементы, идущие после указанного индекса, на одну позицию вправо:
public static int[] insertAnElementAtAGivenIndex(final int[] srcArray, int index, int newElement) int[] destArray = new int[srcArray.length+1]; int j = 0; for(int i = 0; i destArray.length-1; i++) if(i == index) destArray[i] = newElement; > else destArray[i] = srcArray[j]; j++; > > return destArray; >
Однако класс ArrayUtils дает нам более простое решение для вставки элементов в массив :
int[] destArray = ArrayUtils.insert(2, srcArray, 77);
Мы должны указать индекс, в который мы хотим вставить значение, исходный массив и значение для вставки.
Метод insert() возвращает новый массив, содержащий большее количество элементов, с новым элементом по указанному индексу и всеми остальными элементами, сдвинутыми на одну позицию вправо.
Обратите внимание, что последний аргумент метода insert() является переменным аргументом, поэтому мы можем вставить любое количество элементов в массив.
Давайте используем его для вставки трех элементов в srcArray, начиная со второго индекса:
int[] destArray = ArrayUtils.insert(2, srcArray, 77, 88, 99);
А остальные элементы будут смещены на три позиции вправо.
Кроме того, это можно сделать тривиально для ArrayList :
anArrayList.add(index, newElement);
ArrayList сдвигает элементы и вставляет элемент в нужное место.
5. Вывод
В этой статье мы рассмотрели массив Java и ArrayList . Кроме того, мы рассмотрели сходства и различия между ними. Наконец, мы увидели, как добавлять и вставлять элементы в массив и ArrayList .
Как всегда, полный исходный код рабочих примеров доступен на GitHub .
- 1. Обзор
- 2. Массивы Java и ArrayList
- 2.1. Доступ и изменение элементов
- 2.2. Фиксированный и динамический размер
- 2.3. Типы элементов
Как добавить элемент в конец массива java
В Java массивы имеют фиксированную длину, и вы не можете добавить новый элемент в конец массива. Однако, вы можете создать новый массив с увеличенной длиной и скопировать в него все элементы из старого массива, а затем добавить новый элемент в конец нового массива.
Вот пример кода, который добавляет элемент в конец массива:
// Исходный массив int[] arr = 1, 2, 3>; // Создаем новый массив с длиной на 1 больше исходного массива int[] newArr = new int[arr.length + 1]; // Копируем все элементы из исходного массива в новый массив for (int i = 0; i arr.length; i++) newArr[i] = arr[i]; > // Добавляем новый элемент в конец нового массива newArr[newArr.length - 1] = 4; // Используем новый массив вместо старого массива arr = newArr; // [1, 2, 3, 4]Добавление элемента в массив путем сдвига
Вставить в массив число 10 после второго элемента(под вставкой числа n в массив после k-го элемента следует понимать: увеличение размера массива на 1; смещение всех элементов, начиная с (k+1)-го вправо на одну позицию; присваивание (k+1)-му элементу массива значения n). Смогу сдвинуть элементы массива вправо, но не полностью(36 не показывает, то есть не увеличил длину массива) и добавил после 2-го элемента число 10.
int nums[] = < 14, 28, 60, 74, 98, 36 >; for (int t = 0; t < nums.length; t++) System.out.print(nums[t] + " "); System.out.println(); for (int j = nums.length - 1; j >1; j--) nums[j] = nums[j - 1]; nums[2] = 10; for (int d = 0; d < nums.length; d++) System.out.print(nums[d] + " "); System.out.println();Есть еще одно решение, но там получается полная белиберда, зато увеличил длину массива.
int nums[] = < 14, 28, 60, 74, 98, 36 >; for (int t = 0; t < nums.length; t++) System.out.print(nums[t] + " "); System.out.println(); for (int i = 0; i < nums.length; i++) < if (i < 2) System.out.print(nums[i] + " "); else < for (int j = nums.length - 1; j >1; j--) nums[j] = nums[j - 1]; > > nums[2] = 10; for (int d = 1; d < nums.length; d++) System.out.print(nums[d] + " "); System.out.println();Отслеживать
задан 24 июн 2021 в 8:02
37 5 5 бронзовых знаков
А в джаве длину масcива поменять можно, или для этого нужен arraylist?
24 июн 2021 в 8:07
Без понятия, я даже не знаю что такое arraylist.
24 июн 2021 в 8:14
Ну это был наводящий вопрос.
24 июн 2021 в 8:16
Мне нужно узнать что такое arraylist, да ?
24 июн 2021 в 8:17
Не факт. Если задача подразумевает использование именно массива, то нужно создать новый массив с большей длиной и скопировать нужные элементы туда
Как в новый пустой массив добавить определённое значение из другого массива?
Из массива arr добавить 2 и 3 элемент в массив NewArr, чтобы в новом массиве было только два этих новых элемента.
Отслеживать
задан 12 ноя 2022 в 20:25
79 7 7 бронзовых знаков4 ответа 4
Сортировка: Сброс на вариант по умолчанию
Вы создали массив нулевой длины. В языке Java невозможно изменить размер массива после его создания.
Сначала создайте массив нужного размера:
int[] newArr = new int[2];Потом выполните необходимые манипуляции:
newArr[0] = arr[2]; newArr[1] = arr[3];Если вам нужны динамические массивы, то используйте Java-коллекции.
Отслеживать
ответ дан 12 ноя 2022 в 21:00
Vadik Sirekanyan Vadik Sirekanyan
8,571 4 4 золотых знака 21 21 серебряный знак 36 36 бронзовых знаковВ Джаве массив не является динамическим, то есть его размер должен был определен при инициализации. Если вы объявили его пустым, то он останется пустой. В вашем случае задача решается немного иначе:
int[] arr = new int[] ; int[] newArr = Arrays.copyOfRange(arr, 2, 4);Отслеживать
ответ дан 12 ноя 2022 в 20:58
10.3k 2 2 золотых знака 11 11 серебряных знаков 26 26 бронзовых знаковЕсли под добавлением в массив вы подразумеваете нечто вроде newArr.add(5), то обычный массив в Java так не умеет. Если вам нужно что-то добавлять в массив, расширяя его на ходу, для этого стоит использовать класс ArrayList. Например: ArrayList newArr = new ArrayList<>() , и затем newArr.add(arr[2]); newArr.add(arr[3]) .