Arrays, особенности и внутреннее устройство
Массивы (Arrays) в Java являются одной из самых фундаментальных структур данных, широко используемых при разработке программного обеспечения. Они предоставляют простой способ хранения множества однотипных элементов в единой структуре, обеспечивая доступ к каждому элементу по индексу.
Массивы в Java — это структура данных, позволяющая хранить фиксированное количество элементов одного типа. В отличие от коллекций, массивы имеют фиксированный размер, который задается при их создании и не может быть изменен в дальнейшем. Каждый элемент массива имеет индекс, начиная с нуля, что обеспечивает быстрый доступ к данным.
Внутреннее устройство массивов
Массивы в Java представляют собой последовательные блоки памяти, выделенные для хранения элементов одного типа. Каждый элемент массива хранится в определенной ячейке памяти, и все элементы идут друг за другом. Такой способ хранения позволяет обеспечить доступ к элементам за константное время O(1).
Пример создания массива:
Вывод:
Особенности массивов
1. Фиксированный размер
Одной из ключевых особенностей массивов является их фиксированный размер. После создания массива его размер не может быть изменен, что ограничивает его гибкость. Если требуется изменить размер массива, необходимо создать новый массив и скопировать в него данные из старого.
2. Однородность данных
Массивы могут хранить только данные одного типа. Например, если вы создаете массив целых чисел, вы не можете поместить в него строку или другой тип данных. Это ограничение обеспечивает высокую производительность, поскольку Java точно знает, сколько памяти выделить для каждого элемента массива.
3. Быстрый доступ к элементам
Преимуществом массивов является быстрый доступ к любому элементу по индексу. Этот доступ осуществляется за константное время O(1), что делает массивы эффективными для задач, где требуется частый доступ к элементам по их позиции.
4. Ограниченная функциональность
В отличие от коллекций, массивы не поддерживают методы для добавления, удаления или сортировки элементов. Все операции с массивами, такие как поиск или сортировка, необходимо реализовывать вручную или с использованием утилитных классов, таких как Arrays в Java.
Типы массивов
1. Одномерные массивы
Одномерный массив — это наиболее простой тип массива, в котором элементы хранятся в одном измерении, то есть в виде списка.
#Java #Training #Medium #Arrays
Массивы (Arrays) в Java являются одной из самых фундаментальных структур данных, широко используемых при разработке программного обеспечения. Они предоставляют простой способ хранения множества однотипных элементов в единой структуре, обеспечивая доступ к каждому элементу по индексу.
Массивы в Java — это структура данных, позволяющая хранить фиксированное количество элементов одного типа. В отличие от коллекций, массивы имеют фиксированный размер, который задается при их создании и не может быть изменен в дальнейшем. Каждый элемент массива имеет индекс, начиная с нуля, что обеспечивает быстрый доступ к данным.
Внутреннее устройство массивов
Массивы в Java представляют собой последовательные блоки памяти, выделенные для хранения элементов одного типа. Каждый элемент массива хранится в определенной ячейке памяти, и все элементы идут друг за другом. Такой способ хранения позволяет обеспечить доступ к элементам за константное время O(1).
Пример создания массива:
public class ArrayExample {
public static void main(String[] args) {
// Создание массива целых чисел длиной 5
int[] numbers = new int[5];
// Инициализация массива
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
numbers[3] = 40;
numbers[4] = 50;
// Вывод элементов массива
for (int i = 0; i < numbers.length; i++) {
System.out.println("Element at index " + i + ": " + numbers[i]);
}
}
}
Вывод:
Element at index 0: 10
Element at index 1: 20
Element at index 2: 30
Element at index 3: 40
Element at index 4: 50
В этом примере создается массив целых чисел длиной 5 и инициализируется значениями. Доступ к каждому элементу осуществляется через индекс.
Особенности массивов
1. Фиксированный размер
Одной из ключевых особенностей массивов является их фиксированный размер. После создания массива его размер не может быть изменен, что ограничивает его гибкость. Если требуется изменить размер массива, необходимо создать новый массив и скопировать в него данные из старого.
2. Однородность данных
Массивы могут хранить только данные одного типа. Например, если вы создаете массив целых чисел, вы не можете поместить в него строку или другой тип данных. Это ограничение обеспечивает высокую производительность, поскольку Java точно знает, сколько памяти выделить для каждого элемента массива.
3. Быстрый доступ к элементам
Преимуществом массивов является быстрый доступ к любому элементу по индексу. Этот доступ осуществляется за константное время O(1), что делает массивы эффективными для задач, где требуется частый доступ к элементам по их позиции.
4. Ограниченная функциональность
В отличие от коллекций, массивы не поддерживают методы для добавления, удаления или сортировки элементов. Все операции с массивами, такие как поиск или сортировка, необходимо реализовывать вручную или с использованием утилитных классов, таких как Arrays в Java.
Типы массивов
1. Одномерные массивы
Одномерный массив — это наиболее простой тип массива, в котором элементы хранятся в одном измерении, то есть в виде списка.
public class OneDimensionalArray {
public static void main(String[] args) {
int[] numbers = {10, 20, 30, 40, 50};
for (int i = 0; i < numbers.length; i++) {
System.out.println("Element at index " + i + ": " + numbers[i]);
}
}
}
#Java #Training #Medium #Arrays
2. Многомерные массивы
Многомерный массив — это массив массивов. Наиболее часто используется двумерный массив, который можно представить как таблицу, где строки и столбцы содержат данные.
Вывод:
3. Разреженные массивы
Разреженные массивы — это разновидность многомерных массивов, где каждая строка может иметь разное количество столбцов. Это полезно, когда разные строки массива могут иметь различное количество данных.
Вывод:
Преимущества и недостатки массивов
Преимущества
Высокая производительность: Массивы обеспечивают быстрый доступ к элементам благодаря постоянной времени доступа по индексу.
Простота использования: Массивы легко создавать и использовать, особенно для простых задач, где требуется хранение данных фиксированного размера.
Малое использование памяти: Массивы используют память более эффективно по сравнению с коллекциями, поскольку они не содержат дополнительной информации, такой как ссылки на предыдущие и следующие элементы.
Недостатки
Фиксированный размер: Главным недостатком массивов является их фиксированный размер. Если требуется изменить количество элементов, необходимо создавать новый массив и копировать данные из старого.
Отсутствие гибкости: Массивы не поддерживают динамические операции, такие как добавление или удаление элементов, что делает их менее гибкими по сравнению с коллекциями.
Неудобство при работе с разнородными данными: Массивы могут хранить только элементы одного типа, что ограничивает их использование в задачах, где требуется хранить данные различных типов.
#Java #Training #Medium #Arrays
Многомерный массив — это массив массивов. Наиболее часто используется двумерный массив, который можно представить как таблицу, где строки и столбцы содержат данные.
public class TwoDimensionalArray {
public static void main(String[] args) {
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.println("Element at [" + i + "][" + j + "]: " + matrix[i][j]);
}
}
}
}
Вывод:
Element at [0][0]: 1
Element at [0][1]: 2
Element at [0][2]: 3
Element at [1][0]: 4
Element at [1][1]: 5
Element at [1][2]: 6
Element at [2][0]: 7
Element at [2][1]: 8
Element at [2][2]: 9
3. Разреженные массивы
Разреженные массивы — это разновидность многомерных массивов, где каждая строка может иметь разное количество столбцов. Это полезно, когда разные строки массива могут иметь различное количество данных.
public class JaggedArray {
public static void main(String[] args) {
int[][] jaggedArray = new int[3][];
jaggedArray[0] = new int[]{1, 2};
jaggedArray[1] = new int[]{3, 4, 5};
jaggedArray[2] = new int[]{6, 7, 8, 9};
for (int i = 0; i < jaggedArray.length; i++) {
for (int j = 0; j < jaggedArray[i].length; j++) {
System.out.println("Element at [" + i + "][" + j + "]: " + jaggedArray[i][j]);
}
}
}
}
Вывод:
Element at [0][0]: 1
Element at [0][1]: 2
Element at [1][0]: 3
Element at [1][1]: 4
Element at [1][2]: 5
Element at [2][0]: 6
Element at [2][1]: 7
Element at [2][2]: 8
Element at [2][3]: 9
Преимущества и недостатки массивов
Преимущества
Высокая производительность: Массивы обеспечивают быстрый доступ к элементам благодаря постоянной времени доступа по индексу.
Простота использования: Массивы легко создавать и использовать, особенно для простых задач, где требуется хранение данных фиксированного размера.
Малое использование памяти: Массивы используют память более эффективно по сравнению с коллекциями, поскольку они не содержат дополнительной информации, такой как ссылки на предыдущие и следующие элементы.
Недостатки
Фиксированный размер: Главным недостатком массивов является их фиксированный размер. Если требуется изменить количество элементов, необходимо создавать новый массив и копировать данные из старого.
Отсутствие гибкости: Массивы не поддерживают динамические операции, такие как добавление или удаление элементов, что делает их менее гибкими по сравнению с коллекциями.
Неудобство при работе с разнородными данными: Массивы могут хранить только элементы одного типа, что ограничивает их использование в задачах, где требуется хранить данные различных типов.
#Java #Training #Medium #Arrays
Основные утилитные методы класса Arrays
1. Arrays.toString()
Метод toString() преобразует массив в строковое представление, что удобно для вывода его содержимого в лог или консоль. Этот метод поддерживает массивы любых типов, включая примитивные типы и объекты.
Вывод:
2. Arrays.sort()
Метод sort() сортирует массив по возрастанию с использованием алгоритма быстрой сортировки (QuickSort) для примитивных типов и сортировки слиянием (MergeSort) для объектов. Этот метод чрезвычайно полезен для упорядочивания данных.
Вывод:
3. Arrays.binarySearch()
Метод binarySearch() используется для поиска элемента в отсортированном массиве. Если элемент найден, метод возвращает его индекс; если нет — отрицательное значение, указывающее на предполагаемую позицию элемента в массиве.
Вывод:
4. Arrays.copyOf()
Метод copyOf() позволяет создать копию массива с новым размером. Этот метод полезен для изменения размера массива или создания его дубликата.
Вывод:
5. Arrays.equals()
Метод equals() проверяет, равны ли два массива по содержимому. Этот метод полезен при необходимости сравнения массивов, так как оператор == проверяет только равенство ссылок, а не содержимого массивов.
Вывод:
#Java #Training #Medium #Arrays
1. Arrays.toString()
Метод toString() преобразует массив в строковое представление, что удобно для вывода его содержимого в лог или консоль. Этот метод поддерживает массивы любых типов, включая примитивные типы и объекты.
import java.util.Arrays;
public class ToStringExample {
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4, 5};
String arrayAsString = Arrays.toString(numbers);
System.out.println("Array: " + arrayAsString);
}
}
Вывод:
Array: [1, 2, 3, 4, 5]
2. Arrays.sort()
Метод sort() сортирует массив по возрастанию с использованием алгоритма быстрой сортировки (QuickSort) для примитивных типов и сортировки слиянием (MergeSort) для объектов. Этот метод чрезвычайно полезен для упорядочивания данных.
import java.util.Arrays;
public class SortExample {
public static void main(String[] args) {
String[] fruits = {"Banana", "Apple", "Cherry", "Date"};
Arrays.sort(fruits);
System.out.println("Sorted array: " + Arrays.toString(fruits));
}
}
Вывод:
Sorted array: [Apple, Banana, Cherry, Date]
3. Arrays.binarySearch()
Метод binarySearch() используется для поиска элемента в отсортированном массиве. Если элемент найден, метод возвращает его индекс; если нет — отрицательное значение, указывающее на предполагаемую позицию элемента в массиве.
import java.util.Arrays;
public class BinarySearchExample {
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4, 5};
int index = Arrays.binarySearch(numbers, 3);
if (index >= 0) {
System.out.println("Element found at index: " + index);
} else {
System.out.println("Element not found");
}
}
}
Вывод:
Element found at index: 2
4. Arrays.copyOf()
Метод copyOf() позволяет создать копию массива с новым размером. Этот метод полезен для изменения размера массива или создания его дубликата.
import java.util.Arrays;
public class CopyOfExample {
public static void main(String[] args) {
int[] original = {1, 2, 3};
int[] copy = Arrays.copyOf(original, 5);
System.out.println("Original array: " + Arrays.toString(original));
System.out.println("Copied array: " + Arrays.toString(copy));
}
}
Вывод:
Original array: [1, 2, 3]
Copied array: [1, 2, 3, 0, 0]
В этом примере новый массив copy содержит те же элементы, что и original, но его длина увеличена до 5. Остальные элементы заполняются значениями по умолчанию для типа данных (в данном случае нулями для целых чисел).
5. Arrays.equals()
Метод equals() проверяет, равны ли два массива по содержимому. Этот метод полезен при необходимости сравнения массивов, так как оператор == проверяет только равенство ссылок, а не содержимого массивов.
import java.util.Arrays;
public class EqualsExample {
public static void main(String[] args) {
int[] array1 = {1, 2, 3};
int[] array2 = {1, 2, 3};
boolean areEqual = Arrays.equals(array1, array2);
System.out.println("Arrays are equal: " + areEqual);
}
}
Вывод:
Arrays are equal: true
#Java #Training #Medium #Arrays
Сложные методы класса Arrays
1. Arrays.parallelSort()
Метод parallelSort() сортирует массив, используя многопоточность для повышения производительности на многоядерных процессорах. Этот метод особенно полезен для сортировки больших массивов, где использование параллелизма может значительно ускорить процесс.
Вывод:
2. Arrays.stream()
Метод stream() позволяет преобразовать массив в поток (Stream), что открывает доступ к богатому набору методов для обработки данных, таких как фильтрация, маппинг и редукция. Этот метод особенно полезен для выполнения сложных операций над массивами в функциональном стиле.
Вывод:
3. Arrays.deepEquals()
Метод deepEquals() сравнивает вложенные массивы (например, двумерные массивы), обеспечивая корректное сравнение их содержимого. Это важно, так как обычный метод equals() сравнивает ссылки на вложенные массивы, а не их содержимое.
Вывод:
4. Arrays.setAll()
Метод setAll() позволяет инициализировать или модифицировать массив, применяя к каждому элементу функцию на основе его индекса. Этот метод особенно удобен для создания последовательностей или для сложных инициализаций массива.
Вывод:
#Java #Training #Medium #Arrays
1. Arrays.parallelSort()
Метод parallelSort() сортирует массив, используя многопоточность для повышения производительности на многоядерных процессорах. Этот метод особенно полезен для сортировки больших массивов, где использование параллелизма может значительно ускорить процесс.
import java.util.Arrays;
public class ParallelSortExample {
public static void main(String[] args) {
int[] largeArray = {5, 1, 4, 2, 3};
Arrays.parallelSort(largeArray);
System.out.println("Parallel sorted array: " + Arrays.toString(largeArray));
}
}
Вывод:
Parallel sorted array: [1, 2, 3, 4, 5]
2. Arrays.stream()
Метод stream() позволяет преобразовать массив в поток (Stream), что открывает доступ к богатому набору методов для обработки данных, таких как фильтрация, маппинг и редукция. Этот метод особенно полезен для выполнения сложных операций над массивами в функциональном стиле.
import java.util.Arrays;
import java.util.stream.IntStream;
public class StreamExample {
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4, 5};
IntStream stream = Arrays.stream(numbers);
int sum = stream.filter(n -> n % 2 == 0).sum();
System.out.println("Sum of even numbers: " + sum);
}
}
Вывод:
Sum of even numbers: 6
В этом примере метод stream() преобразует массив в поток, который затем используется для фильтрации четных чисел и их суммирования.
3. Arrays.deepEquals()
Метод deepEquals() сравнивает вложенные массивы (например, двумерные массивы), обеспечивая корректное сравнение их содержимого. Это важно, так как обычный метод equals() сравнивает ссылки на вложенные массивы, а не их содержимое.
import java.util.Arrays;
public class DeepEqualsExample {
public static void main(String[] args) {
int[][] array1 = {{1, 2, 3}, {4, 5, 6}};
int[][] array2 = {{1, 2, 3}, {4, 5, 6}};
boolean areEqual = Arrays.deepEquals(array1, array2);
System.out.println("2D arrays are equal: " + areEqual);
}
}
Вывод:
2D arrays are equal: true
4. Arrays.setAll()
Метод setAll() позволяет инициализировать или модифицировать массив, применяя к каждому элементу функцию на основе его индекса. Этот метод особенно удобен для создания последовательностей или для сложных инициализаций массива.
import java.util.Arrays;
public class SetAllExample {
public static void main(String[] args) {
int[] numbers = new int[5];
Arrays.setAll(numbers, i -> i * 2);
System.out.println("Array after setAll: " + Arrays.toString(numbers));
}
}
Вывод:
Array after setAll: [0, 2, 4, 6, 8]
#Java #Training #Medium #Arrays
Ссылочные типы в Java — массивы
В Java массивы представляют собой ссылочные типы данных, которые позволяют хранить фиксированное количество элементов одного типа. В отличие от примитивных типов, массивы создаются в куче и управляются через ссылки. Понимание того, как работают массивы как объекты в Java, критически важно для эффективного управления памятью, избежания ошибок и написания производительного кода.
Создание массивов
Массивы в Java создаются с помощью ключевого слова new, аналогично другим объектам. При этом в куче выделяется непрерывный блок памяти под элементы массива.
Например:
Здесь переменная numbers — это ссылка на объект массива, содержащего 5 элементов типа int. Все элементы автоматически инициализируются значениями по умолчанию — нулями для чисел, false для логических значений, null для ссылок.
Можно также создать и инициализировать массив сразу:
Ключевые моменты:
Массив — это объект, даже если он содержит примитивные типы.
У массива всегда есть поле length, определяющее количество элементов.
После создания размер массива изменить нельзя. Для динамических структур используются коллекции, такие как ArrayList.
Существование и удаление массивов
Как и другие объекты в Java, массивы существуют в памяти до тех пор, пока на них имеются ссылки.
Когда все ссылки теряются, массив становится кандидатом на сборку мусора:
Если массив используется в нескольких местах через копирование ссылок, он не будет удалён, пока хотя бы одна ссылка остаётся активной. Это особенно важно при передаче массивов в методы, возврате из методов и хранении их в структурах данных.
Использование массивов
Массивы позволяют обращаться к элементам по индексу, начиная с нуля:
При передаче массива в метод метод получает копию ссылки, а не сам массив.
Это означает, что любые изменения внутри метода влияют на оригинальный массив:
Также массивы могут быть многомерными, например, двумерный массив int[][] представляет собой массив массивов.
#Java #для_новичков #beginner #reference_types #Arrays
В Java массивы представляют собой ссылочные типы данных, которые позволяют хранить фиксированное количество элементов одного типа. В отличие от примитивных типов, массивы создаются в куче и управляются через ссылки. Понимание того, как работают массивы как объекты в Java, критически важно для эффективного управления памятью, избежания ошибок и написания производительного кода.
Создание массивов
Массивы в Java создаются с помощью ключевого слова new, аналогично другим объектам. При этом в куче выделяется непрерывный блок памяти под элементы массива.
Например:
int[] numbers = new int[5];
Здесь переменная numbers — это ссылка на объект массива, содержащего 5 элементов типа int. Все элементы автоматически инициализируются значениями по умолчанию — нулями для чисел, false для логических значений, null для ссылок.
Можно также создать и инициализировать массив сразу:
String[] names = {"Alice", "Bob", "Charlie"};
Ключевые моменты:
Массив — это объект, даже если он содержит примитивные типы.
У массива всегда есть поле length, определяющее количество элементов.
После создания размер массива изменить нельзя. Для динамических структур используются коллекции, такие как ArrayList.
Существование и удаление массивов
Как и другие объекты в Java, массивы существуют в памяти до тех пор, пока на них имеются ссылки.
Когда все ссылки теряются, массив становится кандидатом на сборку мусора:
int[] data = new int[100];
data = null; // массив станет доступен для удаления
Если массив используется в нескольких местах через копирование ссылок, он не будет удалён, пока хотя бы одна ссылка остаётся активной. Это особенно важно при передаче массивов в методы, возврате из методов и хранении их в структурах данных.
Использование массивов
Массивы позволяют обращаться к элементам по индексу, начиная с нуля:
numbers[0] = 10;
System.out.println(numbers[0]); // выводит 10
При передаче массива в метод метод получает копию ссылки, а не сам массив.
Это означает, что любые изменения внутри метода влияют на оригинальный массив:
void fill(int[] arr) {
arr[0] = 42;
}
После вызова fill(numbers) значение numbers[0] станет 42.
Также массивы могут быть многомерными, например, двумерный массив int[][] представляет собой массив массивов.
#Java #для_новичков #beginner #reference_types #Arrays
Трудности и подводные камни
Работа с массивами может сопровождаться рядом типичных ошибок:
1. ArrayIndexOutOfBoundsException
Ошибка возникает при попытке обратиться к несуществующему индексу:
2. NullPointerException
Если массив равен null, любая попытка доступа к его элементам вызывает исключение:
3. Фиксированный размер
После создания размер массива не может быть изменён. Чтобы добавить или удалить элементы, необходимо создать новый массив или использовать коллекции.
4. Поверхностное копирование
При копировании массива переменная будет указывать на тот же объект, если используется простое присваивание:
Для создания копии используется метод Arrays.copyOf или ручное копирование по элементам.
5. Сравнение массивов
Сравнение массивов через == проверяет ссылки, а не содержимое.
Для сравнения содержимого следует использовать Arrays.equals():
6. Утечки памяти
Массивы могут стать причиной утечек памяти, если ссылки на них остаются в структурах данных (например, кешах), даже когда они больше не нужны.
7. Потокобезопасность
Если массив используется из нескольких потоков, требуется синхронизация. Иначе возможны ошибки при чтении и записи.
Дополнительные нюансы
Массивы как объекты:
Даже массив примитивных типов — это объект, доступный через ссылку, с полем length.
Обобщения:
Нельзя создавать массивы параметризованных типов, например new List<String>[10], из-за ограничений системы типов Java. Для таких целей используют коллекции.
Массивы и методы класса Object:
Как и другие объекты, массивы наследуют методы класса Object, например toString() и hashCode(), но стандартная реализация toString() для массивов возвращает строку вида [I@1b6d3586. Для корректного вывода содержимого массива используйте Arrays.toString() или Arrays.deepToString().
Массивы и производительность:
Работа с массивами быстрее, чем с коллекциями, за счёт простоты реализации и отсутствия лишнего обёртывания. Однако отсутствие гибкости может потребовать дополнительного кода.
#Java #для_новичков #beginner #reference_types #Arrays
Работа с массивами может сопровождаться рядом типичных ошибок:
1. ArrayIndexOutOfBoundsException
Ошибка возникает при попытке обратиться к несуществующему индексу:
int[] a = new int[3];
a[3] = 5; // ошибка: допустимые индексы — 0, 1, 2
2. NullPointerException
Если массив равен null, любая попытка доступа к его элементам вызывает исключение:
int[] a = null;
System.out.println(a.length); // ошибка
3. Фиксированный размер
После создания размер массива не может быть изменён. Чтобы добавить или удалить элементы, необходимо создать новый массив или использовать коллекции.
4. Поверхностное копирование
При копировании массива переменная будет указывать на тот же объект, если используется простое присваивание:
int[] a = {1, 2, 3};
int[] b = a;
b[0] = 99;
System.out.println(a[0]); // выведет 99
Для создания копии используется метод Arrays.copyOf или ручное копирование по элементам.
5. Сравнение массивов
Сравнение массивов через == проверяет ссылки, а не содержимое.
Для сравнения содержимого следует использовать Arrays.equals():
int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
System.out.println(a == b); // false
System.out.println(Arrays.equals(a, b)); // true
6. Утечки памяти
Массивы могут стать причиной утечек памяти, если ссылки на них остаются в структурах данных (например, кешах), даже когда они больше не нужны.
7. Потокобезопасность
Если массив используется из нескольких потоков, требуется синхронизация. Иначе возможны ошибки при чтении и записи.
Дополнительные нюансы
Массивы как объекты:
Даже массив примитивных типов — это объект, доступный через ссылку, с полем length.
Обобщения:
Нельзя создавать массивы параметризованных типов, например new List<String>[10], из-за ограничений системы типов Java. Для таких целей используют коллекции.
Массивы и методы класса Object:
Как и другие объекты, массивы наследуют методы класса Object, например toString() и hashCode(), но стандартная реализация toString() для массивов возвращает строку вида [I@1b6d3586. Для корректного вывода содержимого массива используйте Arrays.toString() или Arrays.deepToString().
Массивы и производительность:
Работа с массивами быстрее, чем с коллекциями, за счёт простоты реализации и отсутствия лишнего обёртывания. Однако отсутствие гибкости может потребовать дополнительного кода.
#Java #для_новичков #beginner #reference_types #Arrays