Последнее обновление: 09.11.2018
Массив представляет набор однотипных значений. Объявление массива похоже на объявление обычной переменной, которая хранит одиночное значение, причем есть два способа объявления массива:
Тип_данных название_массива; // либо тип_данных название_массива;
Например, определим массив чисел:
Int nums; int nums2;
После объявления массива мы можем инициализовать его:
Int nums; nums = new int; // массив из 4 чисел
Создание массива производится с помощью следующей конструкции: new тип_данных[количество_элементов] , где new - ключевое слово, выделяющее память для указанного в скобках количества элементов. Например, nums = new int; - в этом выражении создается массив из четырех элементов int, и каждый элемент будет иметь значение по умолчанию - число 0.
Также можно сразу при объявлении массива инициализировать его:
Int nums = new int; // массив из 4 чисел int nums2 = new int; // массив из 5 чисел
При подобной инициализации все элементы массива имеют значение по умолчанию. Для числовых типов (в том числе для типа char) это число 0, для типа boolean это значение false , а для остальных объектов это значение null . Например, для типа int значением по умолчанию является число 0, поэтому выше определенный массив nums будет состоять из четырех нулей.
Однако также можно задать конкретные значения для элементов массива при его создании:
// эти два способа равноценны int nums = new int { 1, 2, 3, 5 }; int nums2 = { 1, 2, 3, 5 };
Стоит отметить, что в этом случае в квадратных скобках не указывается размер массива, так как он вычисляется по количеству элементов в фигурных скобках.
После создания массива мы можем обратиться к любому его элементу по индексу, который передается в квадратных скобках после названия переменной массива:
Int nums = new int; // устанавливаем значения элементов массива nums = 1; nums = 2; nums = 4; nums = 100; // получаем значение третьего элемента массива System.out.println(nums); // 4
Индексация элементов массива начинается с 0, поэтому в данном случае, чтобы обратиться к четвертому элементу в массиве, нам надо использовать выражение nums .
И так как у нас массив определен только для 4 элементов, то мы не можем обратиться, например, к шестому элементу: nums = 5; . Если мы так попытаемся сделать, то мы получим ошибку.
Важнейшее свойство, которым обладают массивы, является свойство length , возвращающее длину массива, то есть количество его элементов:
Int nums = {1, 2, 3, 4, 5}; int length = nums.length; // 5
Нередко бывает неизвестным последний индекс, и чтобы получить последний элемент массива, мы можем использовать это свойство:
Int last = nums;
Ранее мы рассматривали одномерные массивы, которые можно представить как цепочку или строку однотипных значений. Но кроме одномерных массивов также бывают и многомерными. Наиболее известный многомерный массив - таблица, представляющая двухмерный массив:
Int nums1 = new int { 0, 1, 2, 3, 4, 5 }; int nums2 = { { 0, 1, 2 }, { 3, 4, 5 } };
Визуально оба массива можно представить следующим образом:
Поскольку массив nums2 двухмерный, он представляет собой простую таблицу. Его также можно было создать следующим образом: int nums2 = new int; . Количество квадратных скобок указывает на размерность массива. А числа в скобках - на количество строк и столбцов. И также, используя индексы, мы можем использовать элементы массива в программе:
// установим элемент первого столбца второй строки nums2=44; System.out.println(nums2);
Объявление трехмерного массива могло бы выглядеть так:
Int nums3 = new int;
Многомерные массивы могут быть также представлены как "зубчатые массивы". В вышеприведенном примере двухмерный массив имел 3 строчки и три столбца, поэтому у нас получалась ровная таблица. Но мы можем каждому элементу в двухмерном массиве присвоить отдельный массив с различным количеством элементов:
Int nums = new int; nums = new int; nums = new int; nums = new int;
Специальная версия цикла for предназначена для перебора элементов в наборах элементов, например, в массивах и коллекциях. Она аналогична действию цикла foreach , который имеется в других языках программирования. Формальное ее объявление:
For (тип_данных название_переменной: контейнер){ // действия }
Например:
Int array = new int { 1, 2, 3, 4, 5 }; for (int i: array){ System.out.println(i); }
В качестве контейнера в данном случае выступает массив данных типа int . Затем объявляется переменная с типом int
То же самое можно было бы сделать и с помощью обычной версии for:
Int array = new int { 1, 2, 3, 4, 5 }; for (int i = 0; i < array.length; i++){ System.out.println(array[i]); }
В то же время эта версия цикла for более гибкая по сравнению for (int i: array) . В частности, в этой версии мы можем изменять элементы:
Int array = new int { 1, 2, 3, 4, 5 };
for (int i=0; i Сначала создается цикл для перебора по строкам, а затем внутри первого цикла создается внутренний цикл для перебора по столбцам конкретной строки.
Подобным образом можно перебрать и трехмерные массивы и наборы с большим количеством размерностей. Массив в Java - это набор элементов одного типа, обратиться к которым можно по индексу. Элементы массивов в Java расположены друг за другом в памяти компьютера. Ниже разбирается пример массива в Java. Объявим массив, для хранения элементов типа int: Здесь объявлена переменная arr, которая является массивом. Чтоб использовать эту переменную нужно её определить. Для определения массива в Java следует указать его длину, т.е. количество элементов, которые могут в нём храниться: В нашем массиве бедет храниться 5 элементов. Массив - это набор элементов. К каждому элементу массива можно обратиться по его номеру. Номер принято называть индексом. Нумерация элементов массива в Java идёт с нуля. Присвоим значение первому элементу массива, а первый элемент имеет индекс ноль: Присвоим значение второму элементу массива, а второй элемент имеет индекс один: for(int inn = 0; inn < 5; inn++) Можно при объявлении массива сразу загрузить в него значения: int arr = {0, 1, 2, 3, 4}; количество элементов здесь равно 5-ти, т.е. нет необходимости указать число элементов, оно будет определено автоматически. К каждому элементу массива можно обратиться по его номеру. Чтоб получить элемент массива, надо указать имя массива и индекс элемента: это первый элемент массива, ведь у первого элемета индекс ноль. Присвоим значение третьего элемента массива переменной int a: Выведем в цикле все элементы массива (переберем массив): For(int inn = 0; inn < 5; inn++)
{
System.out.println("arr[" + inn + "] = " + arr);
}
Упрощенный вариант цикла для вывода массива таков: For(int inn: arr)
{
System.out.println("arr[" + inn + "] = " + arr);
}
Удалить массив в Java можно так: Длину массива в Java получаем так: int arrLength = arr.length; int firstElem = arr; int lastElem = arr; Как в Java задать массив переменной длины? Никак. Когда вы определяете массив, тогда и задаёте его длину, изменить её в дальнейшем нельзя. В таких случаях используют коллекции, например: Vector, ArrayList и др. Итак, перемнной длина массива быть не может. Но можно использовать переменную при определении массива. Если так: int cd; то получим ошибку, длина массива не может быть переменной. Надо задать значение cd: int cd = 10; Теперь нормально. Если после определения массива изменить переменную cd, то это не повлияет на массив, т.е. его длина не изменится. Пример: Int cd = 10;
int ab = new int;
cd = 12;// Это можно
arrLength = ab.length;
System.out.println("ab array length = " + arrLength);
//Выводит: ab array length = 10
ab=4;// А вот здесь ошибка
Получим ошибку: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11 Максимальный индекс нашего массива равен 9-ти. Изменение значения переменной cd не влияет на массив, ведь он уже определен и его длина есть константа. Переменные можно использовать для обращения к элементам массива: Int var = 1; Пример массива символов в Java и его вывода: Char charArr = {"S", "B", "P"};
for(int inn = 0; inn < charArr.length; inn++)
{
System.out.println("charArr[" + inn + "] = " + charArr);
}
Заполнить массив можно с помощью статического метода fill. Массив
(англ. Array)
это объект, хранящий в себе фиксированное количество значений одного типа. Другими словами, массив — это нумерованный набор переменных. Переменная в массиве называется элементом массива
, а ее позиция в массиве задается индексом
. Например, нам нужно хранить 50 различных имен, согласитесь, неудобно для каждого имени создавать отдельную переменную, поэтому мы будем использовать массив. Нумерация элементов массива начинается с 0, а длинна массива устанавливается в момент его создания и фиксируется. Для наглядности картинка, взятая мною с The Java Tutorial
. Для того чтобы создать массив нужно его объявить, зарезервировать для него память и инициализировать. При создании массива в Java первым делом его нужно объявить. Это можно сделать следующим образом: Int myFirstArray; Можно также объявить массив так: Int mySecondArray; Однако, это не приветствуется соглашением по оформлению кода в Java, поскольку скобки обозначают то, что мы имеем дело с массивом и логичнее, когда они находятся рядом с обозначением типа. Исходя из данного примера, мы объявили 2 массива с именами myFirstArray
и mySecondArray
. Оба массива будут содержать элементы типа int
. Подобным образом можно объявить массив любого типа: Byte anArrayOfBytes;
short anArrayOfShorts;
long anArrayOfLongs;
float anArrayOfFloats;
double anArrayOfDoubles;
boolean anArrayOfBooleans;
char anArrayOfChars;
String anArrayOfStrings;
... Тип массива задается следующим образом type, где type это тип данных содержащихся в нем элементов. Скобки являются специальным обозначением того, что переменные содержатся в массиве. Имя массива может быль любым, однако, оно должно соответствовать . Массивы можно создавать не только из переменных базовых типов, но и из произвольных объектов. При объявлении массива в языке Java не указывается его размер и не резервируется память для него. Происходит лишь создание ссылки на массив. Int myFirstArray;
myFirstArray = new int; В нашем примере мы создали массив из 15 элементов типа int
и присвоили его ранее объявленной переменной myFirstArray
. Объявлять имя массива и резервировать для него память также можно на одной строке. Int myArray = new int; При создании массива с помощью ключевого слова new
, все элементы массива автоматически инициализированы нулевыми значениями. Для того, чтобы присвоить элементам массива свои начальные значения, необходимо провести его инициализацию
. Инициализацию можно проводить как поэлементно MyFirstArray = 10; // инициализация первого элемента
myFirstArray = 20; // инициализация второго элемента
myFirstArray = 30; // и т.д. так и в цикле, с помощью индекса проходя все элементы массива и присваивая им значения. For(int i = 0; i < 15; i++){
myFirstArray[i] = 10;
} Как видно из предыдущих примеров, для того, чтобы обратиться к элементу массива, нужно указать его имя и, затем, в квадратных скобках — индекс элемента. Элемент массива с конкретным индексом ведёт себя также, как и переменная. Рассмотрим создание и инициализацию массива на следующем примере. В нем мы создаем массив, содержащий цифры 0-9 и выводим значения на консоль. //создание и инициализация массива
int numberArray = new int;
for(int i = 0; i < 10; i++){
numberArray[i] = i;
}
//вывод значений на консоль
for(int i = 0; i < 10; i++){
System.out.println((i+1) + "-й элемент массива = " + numberArray[i]);
} Для создания и инициализации массива можно также использовать упрощенную запись. Она не содержит слово new
, а в скобках перечисляются начальные значения массива. Int myColor = {255, 255, 0}; Здесь длина массива определяется числом значений, расположенных между скобками и разделенных запятыми. Такая запись больше подходит для создания небольших массивов Размер массива не всегда очевиден, поэтому для того, чтобы его узнать следует использовать свойство length, которое возвращает длину массива. MyColor.length; Данный код поможет нам узнать, что длина массива myColor равна 3. Пример: Задано 4 числа, необходимо найти минимальное Int numbers = {-9, 6, 0, -59};
int min = numbers;
for(int i = 0; i < numbers.length; i++){
if(min>numbers[i])
min = numbers[i];
}
System.out.println(min); В языке Java присутствуют массивы. Эти
массивы типизированы. Декларация Point
myPoints;
описывает переменную myPointsкак массив объектов типаPoint.
Завести массив определенного размера
можно с помощью инструкции вида myPoints
= new Point;
Значения элементов массива при этом
устанавливаются равными специальной
величине null. Размер массива может быть получен во
время выполнения программы: howMany
= myPoints.length;
Для создания массива вы можете пользоваться
квадратными скобками, расположив их
справа от имени массива или от типа
объектов, из которых составлен массив,
например: int
nAnotherNumbers; Допустимы оба варианта, поэтому вы
можете выбрать тот, который вам больше
нравится. При определении массивов в языке Java
нельзя указывать их размер. Приведенные
выше две строки не вызывают резервирования
памяти для массива. Здесь просто создаются
ссылки на массивы, которые без инициализации
использовать нельзя. Для того чтобы заказать память для
массива, вы должны создать соответствующие
объекты с помощью ключевого слова new,
например: int
nAnotherNumbers; nAnotherNumbers
= new int; Как выполнить инициализацию ячеек
таблицы? Такую инициализацию можно выполнить
либо статически, либо динамически. В
первом случае вы просто перечисляете
значения в фигурных скобках, как это
показано ниже: int
nColorRed = {255, 255, 100, 0, 10}; Динамическая инициализация выполняется
с использованием индекса массива,
например, в цикле: int
nInitialValue = 7; int
nAnotherNumbers; nAnotherNumbers
= new int; for(int
i = 0; i < 15; i++) Возможно создавать массивы не только
из переменных базовых типов, но и из
произвольных объектов. Каждый элемент
такого массива должен инициализироваться
оператором new. Массивы могут быть многомерными и, что
интересно, несимметричными. Ниже создается массив массивов. В нулевом
и первом элементе создается массив из
четырех чисел, а во втором - из восьми: int
nDim = new int; nDim
= new int ; nDim
= new int ; nDim
= new int ; Во время выполнения приложения виртуальная
машина Java проверяет выход за границы
массива. Если приложение пытается выйти
за границы массива, происходит исключение. Массивы в языке Java являются объектами
некоторого встроенного класса. Для
этого класса существует возможность
определить размер массива, обратившись
к элементу данных класса с именем length,
например: int
nAnotherNumbers; nAnotherNumbers
= new int; for(int
i = 0; i < nAnotherNumbers.length; i++) nAnotherNumbers[i]
= nInitialValue; Для определения размера массива вам не
нужен такой оператор, как sizeof из языка
программирования С, потому что существует
другой способ определения этого размера. Других структурных типов (не являющихся
объектами) в языке Java нет, то есть нет
структур, объединений и т.п. Нет в Java и
указателей. Строки символов являются объектами
типа String(текстовые константы) илиStringBuffer(изменяемые строки). Пример: String
hello = "Hello world!";
Перебор многомерных массивов в цикле
int nums = new int
{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
for (int i = 0; i < nums.length; i++){
for(int j=0; j < nums[i].length; j++){
System.out.printf("%d ", nums[i][j]);
}
System.out.println();
}
Инициализаторы массивов и безымянные массивы
В языке Java есть средство для одновременного создания массива и его инициализации. Вот пример такой синтаксической конструкции:
int
smallPrimes =
{
2
,
3
,
5
,
7
,
11
,
13
}
;
Отметим, что в этом случае не нужно применять оператор new . Кроме того, можно даже инициализировать безымянный массив:
new
int
{
16
,
19
,
23
,
29
,
31
,
37
}
Это выражение выделяет память для нового массива и заполняет его числами, указанными в фигурных скобках. При этом подсчитывается их количество и, соответственно, определяется размер массива. Эту синтаксическую конструкцию удобно применять для повторной инициализации массива без образования новой переменной. Например, выражение
smallPrimes =
new
int
{
17
,
19
,
23
,
29
,
31
,
37
}
;
представляет собой укороченную запись выражения
int
anonymous =
{
17
,
19
,
23
,
29
,
31
,
37
}
;
smallPrimes =
anonymous;
Можно создать массив нулевого размера. Такой массив может оказаться полезным при написании метода, вычисляющего некий массив, который оказывается пустым. Массив нулевой длины объявляется следующим образом:
new
тип Элементов
Заметим, что такой массив не эквивалентен объекту null .
Копирование массивов arrays
Один массив можно скопировать в другой, но при этом обе переменные будут ссылаться на один и тот же массив.
int
luckyNumbers =
smallPrimes;
luckyNumbers[
5
]
=
12
;
//Теперь элемент smallPrimesтакже равен 12
Результат показан на рис. 3.1. Если необходимо скопировать все элементы одного массива в другой, следует использовать метод arraycopy из класса System . Его вызов выглядит следующим образом:
System.
arraycopy
(from,
fromlndex,
to,
tolndex,
count)
;
Массив to должен иметь достаточный размер, чтобы в нем поместились все копируемые элементы.
Рис.3.1. Копирование массива
Например, показанные ниже операторы, результаты работы которых изображены на рис. 3.2, создают два массива, а затем копируют последние четыре элемента первого массива во второй. Копирование начинается со второй позиции в исходном массиве, а копируемые элементы помещаются в целевой массив, начиная с третьей позиции.
int
smallPrimes =
{
2
,
3
,
5
,
7
,
11
,
13
}
;
int
luckyNumbers =
{
1001
,
1002
,
1003
,
1004
,
1005
,
1006
,
1007
}
;
System.
аrrаусору(smallPrimes,
2
,
luckyNumbers,
3
,
4
)
;
for
(int
i =
0
;
i <
luckyNumbers.
length;
i++
)
System.
out.
println
(i +
": "
+
luckyNumbers[
i]
)
;
Выполнение этих операторов приводит к следующему результату.
0
:
1001
1
:
1002
2
:
1003
3
:
5
4
:
7
5
:
11
6
:
13
Рис. 3.2. Копирование элементов массива
Массив в языке Java значительно отличается от массива в языке C++. Однако он практически совпадает с указателем на динамический массив. Это значит, что оператор
int
a =
new
int
[
100
]
;
//Java
эквивалентен оператору
int
*
=
new
int
[
100
]
;
//C++,
а не
int
a[
100
]
;
//C++
В языке Java оператор пo умолчанию проверяет диапазон изменения индексов. Кроме того, в языке Java нет арифметики указателей - нельзя увеличить указатель а, чтобы обратиться к следующему элементу массива.
Ссылка на перво
Что такое массив?
Объявление массива в Java
Определение массива в Java
Как загрузить элементы в массив?
{
arr = inn;
}Как получить элементы из массива?
Как удалить массив в Java?
Как получить длину массива в Java?
Как получить первый элемент массива в Java?
Как получить полследний элемент массива в Java?
Как в Java задать массив переменной длины?
int ab = new int;//Error.
int ab = new int;
int elem = arr;
var = 2;
elem = arr;Массив символов в Java
Как заполнить массив в Java?
Объявление массива в Java
Резервация памяти для массива и его инициализация.
Упрощенная форма записи
Определение размера массива
Упражнения на тему одномерные массивы в Java: