Добавление элемента в массив 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
Значения массиву можно присваивать различными способами.
Используя индексацию: можно присвоить значение конкретному элементу массива, указав его индекс в квадратных скобках. Например:
int[] arr = new int[3]; arr[0] = 1; arr[1] = 2; arr[2] = 3;Используя инициализацию: можно создать массив с заранее заданными значениями, разделяя их запятыми в фигурных скобках:
int[] arr = 1, 2, 3>;Используя циклы: можно заполнить массив значениями, используя циклы:
int[] arr = new int[3]; for (int i = 0; i arr.length; i++) arr[i] = i + 1; >Здесь мы создаем массив arr длиной 3 и заполняем его значениями от 1 до 3, используя цикл for
Используя методы класса Arrays : класс Arrays в Java предоставляет ряд методов для работы с массивами, в том числе для заполнения массива значениями:
int[] arr = new int[3]; Arrays.fill(arr, 1);Здесь мы создаем массив arr длиной 3 и заполняем его значениями 1, используя метод fill из класса Arrays
Какой способ выбрать зависит от вашей задачи и предпочтений в программировании.
Запись цифр числа в массив
Что-то я не вижу единицы, двойки и шестерки, которые должны получиться при 10 — N[i] . Не говоря уже от том, как это все разломается, когда среди цифр исходного числа будет 0 .
– user176262
12 дек 2019 в 21:16
Создать массив и добавлять туда по числу.
12 дек 2019 в 21:263 ответа 3
Сортировка: Сброс на вариант по умолчанию
int n = 348597; int[] arr = IntStream // начинаем с 'n', каждое последующее число - // это текущее число, делённое на 10 // получаем [348597, 34859, 3485, 348, 34, 3] .iterate(n, i -> i / 10 > 0 || i % 10 > 0, i -> i / 10) // получаем последнюю цифру .map(i -> i % 10) // собираем в массив .toArray(); // выводим массив System.out.println(Arrays.toString(arr)); // [7, 9, 5, 8, 4, 3]Отслеживать
ответ дан 8 дек 2020 в 17:17
user420034 user420034public static void main(String[] args) < int[] arr = new int[6]; int number = 348597; for (int i = 0; i < 6; ++i) < arr[i] += number % 10; number /= 10; >for (int i : arr) < System.out.print(i); >System.out.println(); System.out.println(arr[0]); System.out.println(arr[5]); >Отслеживать
ответ дан 12 дек 2019 в 23:03
38 4 4 бронзовых знака
зачем вы привязываетесь в цикле к константе «6»? попахивает жестким кодированием.
13 дек 2019 в 6:15Можно было бы получать значения с клавиатуры, написать класс и функции, но зачем? Это скорее всего учебная задача. Пусть допишет arr.length или передает аргументом количество.
13 дек 2019 в 9:36
нет, не в этом дело. у вас должен быть метод, который в параметрах принимает число , а возвращает массив его чисел с реверсом.
13 дек 2019 в 9:39
Вы сейчас серьезно? Человек не способен создать функцию и вернуть массив? Уже все готово, осталось подставить нужное число в number через агрумент функции и вернуть массив.
Как вводить числа в массив java
Для ввода массива с клавиатуры в Java можно использовать класс Scanner из стандартной библиотеки Java . Например, чтобы ввести массив целых чисел с клавиатуры, можно использовать следующий код:
import java.util.Scanner; public class Main public static void main(String[] args) Scanner scanner = new Scanner(System.in); System.out.print("Введите длину массива: "); int length = scanner.nextInt(); int[] array = new int[length]; System.out.println("Введите элементы массива:"); for (int i = 0; i length; i++) array[i] = scanner.nextInt(); > System.out.println("Массив: " + Arrays.toString(array)); > >- В этом примере мы создали объект класса Scanner , который позволяет считывать данные из стандартного потока ввода (клавиатуры).
- Затем мы запросили у пользователя длину массива и создали массив нужного размера.
- После этого мы в цикле заполняем массив элементами, вводимыми с клавиатуры, с помощью метода nextInt() объекта Scanner.
- Наконец, мы выводим полученный массив на экран с помощью метода toString() класса Arrays
Для ввода массива других типов данных нужно использовать соответствующие методы класса Scanner , например, nextDouble() для ввода массива вещественных чисел.