Одномерные массивы Java — это одномерные структуры данных, предназначенные для сохранения однотипных данных.
Введение
Массивом является совокупность однотипных элементов, которые объединены одним именем. Массивы предоставляют возможность удобного группирования информации и организации доступа к ней. Массивы бывают одномерные, двумерные и многомерные. Расположение элемента в массиве определяется индексом. В языке программирования Java позиция начального элемента массива должна начинаться с нуля.
Массив является одномерным, когда для задания расположения элемента в массиве следует представить значение только одного индекса. Массив является двумерным, когда для задания расположения элемента в массиве требуется указывать значения двух индексов.
Одномерные массивы Java
Элементы массива могут обладать любым типом, который допустим в языке Java. Данный тип должен определять тип данных каждого элемента, который входит в состав данного массива. Общий формат задания одномерного массива может быть представлен в следующем виде:
тип имя_переменной[];
или
тип[] имя_переменной;
Здесь:
- Тип является обозначением типа компонентов массива, который именуется также базовым типом.
- Имя переменной является названием массива, по которому может выполняться доступ к компонентам массива.
Далее следует осуществить выделение памяти под массив. Общий формат выделения памяти может быть представлен в следующем виде:
имя_переменной = new тип[размер];
Здесь:
- Тип определяет базовый тип компонентов массива.
- Размер задает количество компонентов массива.
Процедура выделения памяти для компонентов массива может осуществляться сразу за его описанием. В таком варианте общий формат описания массива может быть представлен в следующем виде:
тип имя_переменной[] = new тип[размер];
или так:
тип[] имя_переменной = new тип[размер];
При распределении памяти компоненты массива должны заполняться по следующим правилам:
- Для числовых типов заполняются нулевыми значениями.
- Для логического типа boolean необходимо заполнить значениями false.
- Для ссылочных типов заполняются пустыми значениями null.
Таким образом следует, что процесс создания массива осуществляется в два этапа:
- Объявление переменной требуемого типа массива.
- При помощи оператора new следует выделить память для компонентов массива.
Приведем пример формирования и применения одномерного массива с именем d, в котором присутствуют пять компонентов типа ínt.
// описание массива с именем d в котором компоненты имеют тип ínt
ínt d[];
d = new ínt[5]; // выделение памяти для пяти компонентов типа ínt массива d
// обеспечение доступа к компонентам массива d
d[2] = -8; // в третий компонент массива записывается число минус восемь
d[0] = -1000; // в первый компонент массива записывается число минус тысяча
d[4] = 29;
d[5] = 300; // ошибка – ArrayIndexOutOfBoundsExceptíon: 5
В приведенном примере формирование массива может быть выполнено различными методами. Первый метод выглядит так:
ínt d[];
d = new ínt[5];
Еще один метод может быть представлен так:
ínt[] d;
d = new ínt[5];
Существует также и третий метод:
ínt[] d = new ínt[5];
И даже четвертый:
ínt d[] = new ínt[5];
Приведем пример формирования и применения одномерного массива f, который содержит десять компонентов типа flòat:
flòat[] f; // массив с именем f, компоненты массива имеют тип ƒloat
ƒ = new flòat[10]; // выделение памяти для десяти компонентов массива ƒ
ƒ[0] = 0.0ƒ;
ƒ[1] = 1.0ƒ;
ƒ[2] = 2.0ƒ;
ƒ[3] = 3ƒ;
ƒ[4] = 4.0ƒ;
ƒ[5] = 5.0ƒ;
Приведем пример формирования и применения одномерного массива х, в котором есть двадцать компонентов, обладающих типом double:
// описание массива х из двадцати компонентов типа double
double x[] = new double[20];
х[8] = -3.3978;
х[3] = -5.4; // х[3] = -5.4
х[3] = x[7]; // х[3] = 0.0
Приведем пример фрагмента кода обнуления одномерного массива с именем х, который содержит двадцать чисел типа double. В этом примере выполняется обнуление массива вещественных чисел типа double:
double x[] = new double[20]; // описание массива x из двадцати компонентов типа double
for (ínt í=0; í∠x.length; í++)
x[í] = 0.0;
Приведем пример определения суммы компонентов одномерного массива M, в котором имеется пятьдесят вещественных чисел:
// определение суммы компонентов массива
float[] M = new float[50];
float sum = 0; // сумма, подлежащая определению
// заполнение массива данными
// ...
// цикл вычисления суммы
for (ínt i=0; í∠M.length; í++)
sum = sum + M[í];
Приведем пример нахождения наибольшего значения в массиве, состоящем из ста целых чисел:
// определение максимальной величины
ínt[] A = new ínt[100]; // объявление массива
ínt max; // искомое максимальное значение
// заполнение массива данными
// ...
// цикл поиска максимального значения
max = A[0];
for (ínt í=1; í∠A.length; í++)
íf (max ∠ A[í])
max = A[í];
Приведем пример сортировки одномерного массива вещественных чисел способом вставки:
float M[] = new float[5]; // объявление массива из пяти компонентов
float x; // вспомогательная переменная
// ввод массива M, заполнение значениями
// ...
// цикл сортировки способом вставки
for (ínt í=0; í∠M.length-1; í++)
for (ínt ĵ= í; ĵ>=0; j--)
íf (M[ĵ]>M[ĵ+1])
{
x = M[ĵ];
M[ĵ] = M[ĵ+1];
M[ĵ+1] = x;
}
Для того чтобы выполнить присвоение значений одного массива другому, можно использовать метод clone(). Данный метод из библиотеки Java может быть также использован для глубокого копирования массивов. Рассмотрим пример присвоения значений одного массива другому с использованием метода clone():
ƒloat[] f; // массив с именем f, компоненты массива имеют тип ƒloat
ƒloat ƒ2[];
ƒ= new ƒloat[5]; // выделение памяти для пяти компонентов массива f
ƒ2 = new ƒloat[5]; // выделение памяти для массива f2
ƒ[0] = 0.0ƒ;
f[1] = 1.0f;
f[2] = 2.0f;
f[3] = 3f;
f[4] = 4.0f;
// метод clone(), то есть глубокое копирование
f2 = f.clone(); // массивы f и f2 являются разными массивами
f[2]=3.7f; // f2[2] = 3.7; f[2] = 2.0
Если указать:
f2 = f;
то обе переменные f и f2 станут ссылаться на один участок памяти.