16. Java – Массивы
Массивы в Java – это структура данных, которая хранит упорядоченные коллекции фиксированного размера элементов нужного типа. В Java массив используется для хранения коллекции данных, но часто бывает полезно думать о массиве как о совокупности переменных одного типа.
Вместо объявления отдельных переменных, таких как number0, number1, . и number99, Вы объявляете одну переменную массива, например, numbers и используете numbers[0], numbers[1], . и numbers[99], для отображения отдельных переменных.
Данная статья ознакомит Вас как в Java объявить массив переменных, создать и обрабатывать массив с помощью индексированных переменных.
Объявление массива
Чтобы использовать массив в программе, необходимо объявить переменную для ссылки на массив, и Вы должны указать тип массива, который может ссылаться на переменную. Синтаксис для объявления переменной массива:
dataType[] arrayRefVar; // Предпочтительный способ. или dataType arrayRefVar[]; // Работает, но не является предпочтительным способом.
Примечание: стиль dataType[] arrayRefVar является предпочтительным. Стиль dataType arrayRefVar[] происходит из языка C/C++ и был принят в Java для C/C++-программистов.
Пример
Следующие фрагменты кода примеры использования данного синтаксиса:
double[] myList; // Предпочтительный способ. или double myList[]; // Работает, но не является предпочтительным способом.
Создание массива
В Java создать массив можно с помощью оператора new с помощью следующего синтаксиса:
arrayRefVar = new dataType[arraySize];
Вышеуказанное объявление делает две вещи:
- Создает массив, используя new dataType[arraySize];
- Ссылка на недавно созданный массив присваивается переменной arrayRefVar.
Объявление переменной, создание и присвоение переменной ссылки массива могут быть объединены в одном операторе, как показано ниже:
dataType[] arrayRefVar = new dataType[arraySize];
В качестве альтернативы массивы в Java можно создавать следующим образом:
dataType[] arrayRefVar = ;
Элементы массива доступны через индекс. Отсчет индексов ведется от 0; то есть они начинают от 0 и до arrayRefVar.length-1.
Пример
Следующий оператор объявляет массив переменных myList, создает массив из 10 элементов типа double и присваивает ссылку myList:
double[] myList = new double[10];
Изображение отображает массив myList. Здесь myList имеет десять значений double и индексы от 0 до 9.
Работа с массивами
При работе с элементами массива, часто используют цикл for или цикл foreach потому, что все элементы имеют одинаковый тип и известный размер.
Пример
Полный пример, показывающий, как создавать, инициализировать и обработать массив:
public class TestArray < public static void main(String[] args) < double[] myList = ; // Вывести на экран все элементы массива for (int i = 0; i < myList.length; i++) < System.out.println(myList[i] + " "); >// Сумма элементов массива double total = 0; for (int i = 0; i < myList.length; i++) < total += myList[i]; >System.out.println("Сумма чисел массива: " + total); // Нахождение среди элементов массива наибольшего double max = myList[0]; for (int i = 1; i < myList.length; i++) < if (myList[i] >max) max = myList[i]; > System.out.println("Наибольший элемент: " + max); > >
Получим следующий результат:
1.9 2.9 3.4 3.5 Сумма чисел массива: 11.7 Наибольший элемент: 3.5
Цикл foreach
JDK 1.5 представила новый цикл for, известный как цикл foreach или расширенный цикл for, который позволяет последовательно пройти весь массив без использования индекса переменной.
Пример
Следующий код отображает все элементы в массиве myList:
public class TestArray < public static void main(String[] args) < double[] myList = ; // Вывести массив на экран for (double element: myList) < System.out.println(element); >> >
Получим следующий результат:
1.9 2.9 3.4 3.5
Передача массива в метод
Также как можно передать значение примитивного типа в метод, можно также передать массив в метод. Например, следующий метод отображает элементы в int массиве:
public static void printArray(int[] array) < for (int i = 0; i < array.length; i++) < System.out.print(array[i] + " "); >>
Его можно вызвать путем передачи массива. Например, следующий оператор вызывает метод printArray для отображения 3, 1, 2, 6, 4 и 2:
printArray(new int[]);
Возврат массива из метода
Метод может также возвращать массив. Например, метод, показанный ниже, возвращает массив, который является реверсирование другого массива:
public static int[] reverse(int[] list) < int[] result = new int[list.length]; for (int i = 0, j = result.length - 1; i < list.length; i++, j--) < result[j] = list[i]; >return result; >
Методы для массива
Класс java.util.Arrays содержит различные статические методы для поиска, сортировки, сравнения и заполнения элементов массива. Методы перегружаются для всех примитивных типов.
№ | Описание |
1 | public static int binarySearch(Object[] a, Object key) Ищет заданный массив объектов (byte, int, double, и т.д.) для указанного значения, используя алгоритм двоичного поиска. Массив должен быть отсортирован до выполнения этого вызова. Это возвращает индекс ключа поиска, если он содержится в списке; в противном случае (-(точка вставки + 1). |
2 | public static boolean equals(long[] a, long[] a2) Возвращает значение true, если два указанных массивах равны друг другу. Два массива считаются равными, если оба массива содержат одинаковое количество элементов, и все соответствующие пары элементов в двух массивах равны. Такой же метод может быть использован всеми другими примитивными типами данных (byte, short, int и т.д.). |
3 | public static void fill(int[] a, int val) Присваивает определенное значение int к каждому элементу указанного целочисленного массива. Такой же метод может быть использован всеми другими примитивными типами данных (byte, short, int и т.д.). |
4 | public static void sort(Object[] a) Этот метод сортировки сортирует указанный массив объектов в порядке возрастания, в соответствии с естественным порядком его элементов. Такой же метод может быть использован всеми другими примитивными типами данных (byte, short, int и т.д.). |
Пример 1: создание, объявление переменных, определение (выделение памяти) и инициализация массива
В качестве примера возьмем тип данных int. Вы же можете использовать любой другой тип данных.
public class Test < public static void main(String[] args) < // Создание массивов myArrayInt1 и myArrayInt2 типа int и объявление переменных int[] myArrayInt1; int myArrayInt2[]; // Определение массива или выделение памяти // Массив myArrayInt3 из 10 элементов с начальным значением 0 для каждого элемента int[] myArrayInt3; myArrayInt3 = new int[10]; // Массив myArrayInt4 из 20 элементов с начальным значением 0 для каждого элемента int[] myArrayInt4 = new int[20]; //Инициализация массива // Массив myArrayInt5 из 5 элементов со значениями элементов 1, 3, 8, 10, 4 int[] myArrayInt5 = ; // Массив myArrayInt6 из 10 элементов с начальным значением 0 для каждого элемента int[] myArrayInt6 = new int[10]; // Присвоение второму элементу myArrayInt6 значения 14 myArrayInt6[2] = 14; // Присвоение пятому элементу myArrayInt6 значения 8 myArrayInt6[5] = 8; > >
Пример 2: длина массива
Узнать размер массива в Java можно с помощью метода length(). Данный метод позволяет определить размерность массива.
public class Test < public static void main(String[] args) < // Массив myArray1 из 5 элементов типа double. double[] myArray1 = ; // Вывод длины массива myArray1 на экран. System.out.println("Количество элементов в массиве myArray1: " + myArray1.length); // Массив myArray2 из 4 элементов типа String. String[] myArray2 = ; // Вывод размера массива myArray2 на экран. System.out.println("Количество элементов в массиве myArray2: " + myArray2.length); > >
Получим следующий результат:
Количество элементов в массиве myArray1: 5 Количество элементов в массиве myArray2: 4
Пример 3: максимальный элемент массива
Простые способы для того, чтобы найти максимальное число в массиве в Java. Сперва воспользуемся методом Math.max().
public class Test < public static void main(String[] args) < // Нахождение максимального элемента в массиве myArray из 4 элементов типа double. double[] myArray = ; // Переменной max задаем минимальное double-значение. double max = Double.MIN_VALUE; // Перебираем все элементы массива. for (int i = 0; i < myArray.length; i++) < // Переменной max с помощью метода Math.max() присваиваем максимальное значение // путем выбора наибольшего из двух значений ("старого" значения max и значения элемента). max = Math.max(max, myArray[i]); >// Выводим на экран наибольшее число массива myArray. System.out.println("Максимальный элемент в массиве myArray: " + max); > >
Получим следующий результат:
Максимальный элемент в массиве myArray: 11.1
Ещё один пример нахождения максимального числа в массиве в Java. Здесь мы не будем использовать какие-либо методы.
public class Test < public static void main(String[] args) < // Нахождение максимального значения в массиве myArray из 4 элементов типа double. double[] myArray = ; // Переменной max задаем значение нулевого элемента. double max = myArray[0]; // Перебираем все элементы массива. for (int i = 1; i < myArray.length; i++) < // Сравниваем значение переменной max со значениями элемента массива. // Если значение элемента массива больше значения переменной max, // то новое значение переменной max будет равно значению этого элемента. if (myArray[i] >max) < max = myArray[i]; >> // Выводим на экран наибольший элемент массива myArray. System.out.println("Максимальное значение в массиве myArray: " + max); > >
Получим следующий результат:
Максимальное значение в массиве myArray: 11.1
Пример 4: минимальный элемент массива
Написанный ниже код практически ничем не отличается от кода, описанного в примере 3. Он в точности наоборот, просто здесь мы ищем минимальное число в массиве в Java. В первом способе воспользуемся методом Math.min().
public class Test < public static void main(String[] args) < // Нахождение минимального элемента в массиве myArray из 4 элементов типа double. double[] myArray = ; // Переменной min задаем максимальное double-значение. double min = Double.MAX_VALUE; // Перебираем все элементы массива. for (int i = 0; i < myArray.length; i++) < // Переменной min с помощью метода Math.min() присваиваем минимальное значение // путем выбора наименьшего из двух значений ("старого" значения min и значения элемента). min = Math.min(min, myArray[i]); >// Выводим на экран наименьшее число массива myArray. System.out.println("Минимальный элемент в массиве myArray: " + min); > >
Получим следующий результат:
Минимальный элемент в массиве myArray: 5.8
Ещё один пример нахождения максимального числа в массиве в Java. Здесь мы не будем использовать какие-либо методы.
public class Test < public static void main(String[] args) < // Нахождение минимального значения в массиве myArray из 4 элементов типа double. double[] myArray = ; // Переменной min задаем значение нулевого элемента. double min = myArray[0]; // Перебираем все элементы массива. for (int i = 1; i < myArray.length; i++) < // Сравниваем значение переменной min со значениями элемента массива. // Если значение элемента массива меньше значения переменной min, // то новое значение переменной min будет равно значению этого элемента. if (myArray[i] < min) < min = myArray[i]; >> // Выводим на экран наименьший элемент массива myArray. System.out.println("Минимальное значение в массиве myArray: " + min); > >
Получим следующий результат:
Минимальное значение в массиве myArray: 5.8
Пример 5: сумма массива
В этом примере рассмотрим как получить сумму элементов массива в Java.
public class Test < public static void main(String[] args) < // Нахождение суммы элементов в массиве myArray из 5 элементов типа double. double[] myList = ; // Инициализируем переменную total. double total = 0; // Прибавляем к переменной total каждый элемент массива. for (int i = 0; i < myList.length; i++) < total += myList[i]; >// Вывод результата на экран. System.out.println("Сумма элементов массива myList: " + total); > >
Получим следующий результат:
Сумма элементов массива myList: 34.9
А в этом примере используем улучшенный цикл for, чтобы найти сумму массива.
public class Test < public static void main(String[] args) < // Получение суммы элементов в массиве myArray из 5 элементов типа double. double[] myList = ; // Инициализируем переменную total. double total = 0; // Прибавляем к переменной total каждый элемент массива с помощью улучшенного цикла for. for(double element : myList) < total += element; >// Вывод результата на экран. System.out.println("Сумма массива myList: " + total); > >
Получим следующий результат:
Сумма массива myList: 34.9
Пример 6: вывод массива
В данном примере рассмотрим как вывести массив на экран в Java.
public class Test < public static void main(String[] args) < // Вывод на экран массива myArray из 5 элементов типа double. double[] myList = ; // Вывод массива на экран с помощью улучшенного цикла for. System.out.print("Вывод элементов массива myList: "); for(double element : myList) < System.out.print(element + ", "); >// Вывод элементов массива на экран. System.out.print("\nВывод элементов массива myList: "); for (int i = 0; i < myList.length; i++) < System.out.print(myList[i] + ", "); >> >
Получим следующий результат:
Вывод элементов массива myList: 11.5, 1.9, 5.32, 8.8, 15.8, Вывод элементов массива myList: 11.5, 1.9, 5.32, 8.8, 15.8,
Пример 7: вывод четных и нечетных элементов массива
В примере показано как вывести четные и нечетных элементы массива в Java.
public class Test < public static void main(String[] args) < // Массива myArray из 5 элементов типа double. double[] myList = ; // Вывод четных элементов массива на экран. System.out.print("Четные элементы массива myList: "); for (int i = 0; i < myList.length; i++) < if(myList[i]%2 == 0)< System.out.print(myList[i] + ", "); >> // Вывод нечетных элементов массива на экран. System.out.print("\nНечетные элементы массива myList: "); for (int i = 0; i < myList.length; i++) < if(myList[i]%2 != 0)< System.out.print(myList[i] + ", "); >> > >
Получим следующий результат:
Четные элементы массива myList: 2.0, 12.0, Нечетные элементы массива myList: 2.7, 3.0, 23.8,
Пример 8: вывод элементов массива с четным и нечетным индексом
В примере показано как вывести на экран элементы массива с четным и нечетным индексом.
public class Test < public static void main(String[] args) < // Массив myArray из 5 элементов типа double. double[] myList = ; // Вывод элементов массива с четным индексом на экран. System.out.print("Элементы массива myList с четным индексом: "); for (int i = 0; i < myList.length; i++) < if(i%2 == 0)< System.out.print("индекс " + i + " = " + myList[i] + ", "); >> // Вывод элементов массива с нечетным индексом на экран. System.out.print("\nЭлементы массива myList с нечетным индексом: "); for (int i = 0; i < myList.length; i++) < if(i%2 != 0)< System.out.print("индекс " + i + " = " + myList[i] + ", "); >> > >
Получим следующий результат:
Элементы массива myList с четным индексом: индекс 0 = 11.5, индекс 2 = 5.32, индекс 4 = 15.8, Элементы массива myList с нечетным индексом: индекс 1 = 1.9, индекс 3 = 8.8,
Оглавление
- 1. Java – Самоучитель для начинающих
- 2. Java – Обзор языка
- 3. Java – Установка и настройка
- 4. Java – Синтаксис
- 5. Java – Классы и объекты
- 6. Java – Конструкторы
- 7. Java – Типы данных и литералы
- 8. Java – Типы переменных
- 9. Java – Модификаторы
- 10. Java – Операторы
- 11. Java – Циклы и операторы цикла
- 11.1. Java – Цикл while
- 11.2. Java – Цикл for
- 11.3. Java – Улучшенный цикл for
- 11.4. Java – Цикл do..while
- 11.5. Java – Оператор break
- 11.6. Java – Оператор continue
- 12. Java – Операторы принятия решений
- 12.1. Java – Оператор if
- 12.2. Java – Оператор if..else
- 12.3. Java – Вложенный оператор if
- 12.4. Java – Оператор switch..case
- 12.5. Java – Условный оператор (? 🙂
- 13. Java – Числа
- 13.1. Java – Методы byteValue(), shortValue(), intValue(), longValue(), floatValue(), doubleValue()
- 13.2. Java – Метод compareTo()
- 13.3. Java – Метод equals()
- 13.4. Java – Метод valueOf()
- 13.5. Java – Метод toString()
- 13.6. Java – Метод parseInt()
- 13.7. Java – Метод Math.abs()
- 13.8. Java – Метод Math.ceil()
- 13.9. Java – Метод Math.floor()
- 13.10. Java – Метод Math.rint()
- 13.11. Java – Метод Math.round()
- 13.12. Java – Метод Math.min()
- 13.13. Java – Метод Math.max()
- 13.14. Java – Метод Math.exp()
- 13.15. Java – Метод Math.log()
- 13.16. Java – Метод Math.pow()
- 13.17. Java – Метод Math.sqrt()
- 13.18. Java – Метод Math.sin()
- 13.19. Java – Метод Math.cos()
- 13.20. Java – Метод Math.tan()
- 13.21. Java – Метод Math.asin()
- 13.22. Java – Метод Math.acos()
- 13.23. Java – Метод Math.atan()
- 13.24. Java – Метод Math.atan2()
- 13.25. Java – Метод Math.toDegrees()
- 13.26. Java – Метод Math.toRadians()
- 13.27. Java – Метод Math.random()
- 14. Java – Символы
- 14.1. Java – Метод Character.isLetter()
- 14.2. Java – Метод Character.isDigit()
- 14.3. Java – Метод Character.isWhitespace()
- 14.4. Java – Метод Character.isUpperCase()
- 14.5. Java – Метод Character.isLowerCase()
- 14.6. Java – Метод Character.toUpperCase()
- 14.7. Java – Метод Character.toLowerCase()
- 14.8. Java – Метод Character.toString()
- 15. Java – Строки
- 15.1. Java – Метод charAt()
- 15.2. Java – Метод compareTo()
- 15.3. Java – Метод compareToIgnoreCase()
- 15.4. Java – Метод concat()
- 15.5. Java – Метод contentEquals()
- 15.6. Java – Метод copyValueOf()
- 15.7. Java – Метод endsWith()
- 15.8. Java – Метод equals()
- 15.9. Java – Метод equalsIgnoreCase()
- 15.10. Java – Метод getBytes()
- 15.11. Java – Метод getChars()
- 15.12. Java – Метод hashCode()
- 15.13. Java – Метод indexOf()
- 15.14. Java – Метод intern()
- 15.15. Java – Метод lastIndexOf()
- 15.16. Java – Метод length()
- 15.17. Java – Метод matches()
- 15.18. Java – Метод regionMatches()
- 15.19. Java – Метод replace()
- 15.20. Java – Метод replaceAll()
- 15.21. Java – Метод replaceFirst()
- 15.22. Java – Метод split()
- 15.23. Java – Метод startsWith()
- 15.24. Java – Метод subSequence()
- 15.25. Java – Метод substring()
- 15.26. Java – Метод toCharArray()
- 15.27. Java – Метод toLowerCase()
- 15.28. Java – Метод toString()
- 15.29. Java – Метод toUpperCase()
- 15.30. Java – Метод trim()
- 15.31. Java – Метод valueOf()
- 15.32. Java – Классы StringBuilder и StringBuffer
- 15.32.1. Java – Метод append()
- 15.32.2. Java – Метод reverse()
- 15.32.3. Java – Метод delete()
- 15.32.4. Java – Метод insert()
- 15.32.5. Java – Метод replace()
- 16. Java – Массивы
- 17. Java – Дата и время
- 18. Java – Регулярные выражения
- 19. Java – Методы
- 20. Java – Потоки ввода/вывода, файлы и каталоги
- 20.1. Java – Класс ByteArrayInputStream
- 20.2. Java – Класс DataInputStream
- 20.3. Java – Класс ByteArrayOutputStream
- 20.4. Java – Класс DataOutputStream
- 20.5. Java – Класс File
- 20.6. Java – Класс FileReader
- 20.7. Java – Класс FileWriter
- 21. Java – Исключения
- 21.1. Java – Встроенные исключения
- 22. Java – Вложенные и внутренние классы
- 23. Java – Наследование
- 24. Java – Переопределение
- 25. Java – Полиморфизм
- 26. Java – Абстракция
- 27. Java – Инкапсуляция
- 28. Java – Интерфейсы
- 29. Java – Пакеты
- 30. Java – Структуры данных
- 30.1. Java – Интерфейс Enumeration
- 30.2. Java – Класс BitSet
- 30.3. Java – Класс Vector
- 30.4. Java – Класс Stack
- 30.5. Java – Класс Dictionary
- 30.6. Java – Класс Hashtable
- 30.7. Java – Класс Properties
- 31. Java – Коллекции
- 31.1. Java – Интерфейс Collection
- 31.2. Java – Интерфейс List
- 31.3. Java – Интерфейс Set
- 31.4. Java – Интерфейс SortedSet
- 31.5. Java – Интерфейс Map
- 31.6. Java – Интерфейс Map.Entry
- 31.7. Java – Интерфейс SortedMap
- 31.8. Java – Класс LinkedList
- 31.9. Java – Класс ArrayList
- 31.10. Java – Класс HashSet
- 31.11. Java – Класс LinkedHashSet
- 31.12. Java – Класс TreeSet
- 31.13. Java – Класс HashMap
- 31.14. Java – Класс TreeMap
- 31.15. Java – Класс WeakHashMap
- 31.16. Java – Класс LinkedHashMap
- 31.17. Java – Класс IdentityHashMap
- 31.18. Java – Алгоритмы Collection
- 31.19. Java – Iterator и ListIterator
- 31.20. Java – Comparator
- 32. Java – Дженерики
- 33. Java – Сериализация
- 34. Java – Сеть
- 34.1. Java – Обработка URL
- 35. Java – Отправка Email
- 36. Java – Многопоточность
- 36.1. Java – Синхронизация потоков
- 36.2. Java – Межпоточная связь
- 36.3. Java – Взаимная блокировка потоков
- 36.4. Java – Управление потоками
- 37. Java – Основы работы с апплетами
- 38. Java – Javadoc
Массивы в Java: что это такое и как с ними работать
В программировании часто работают с такой математической структурой как массив. В языке Java он рассматривается как некая группа элементов одного типа.
Курс Python basic.
Після курсу ви зможете впевнено працювати з чатботами, скриптами, вбудованими системами, веб- та мобільними застосунками, а також навіть ігровими програмами.
Массив — это структура фиксированного размера, ее нельзя динамически изменять, как, например, это реализовано в коллекциях Java. У массивов есть масса применений — от анализа статистических данных и анализа их структуры до матричных вычислений и векторных операций.
Поскольку массив в Java является объектом, для его создания используется привычный способ: задается переменная (под именем которой мы будем подразумевать сам массив, хотя на самом деле она хранит лишь ссылку на него), а затем с помощью оператора new описываем структуру массива.
Важная характеристика массива — его размерность.
Размерность — это количество индексов, необходимых для обращения к элементу массива. Доступ к любому компоненту массива осуществляется при помощи идентификатора, который называется индексом элемента.
Курс Финансовый директор.
Отримайте комплексне розуміння фінансової діяльності. Час підніматись по карʼєрним сходам.
При этом следует иметь в виду: нумерация элементов массива начинается с нуля. Чаще всего задействуются одномерные массивы, массивы же кратностью более двух используются на практике крайне редко.
Важно: в Java-массиве нельзя смешивать типы полей.
Объявление массива
Команда для задания массива выглядит так:
Обе записи — равнозначны.
Процесс генерирования массива и запись ссылки на него в переменную выглядит так:
Курс Front-end Basic.
Оволодій навичками розробки веб-інтерфейсів та стань справжнім Front-end розробником! Заробляй від 800$ на початку карʼєри.
переменная=new типэлементов [размер_массива];
Для обеих команд допускается более краткая форма:
типэлементов[] переменная=new типэлементов[размер_массива];
Рассмотрим общие формы для объявления одномерного массива.
Объявление массива | Пример | Комментарий |
type variable_name [] | int anArray [] | Java-стиль |
type [] variable_name | int [] anArray | Стиль, перекочевавший в Java из языка программирования С |
При использовании такого объявления мы должны знать, что фактического массива пока не существует. Тут мы просто отправляем сообщение компилятору, о том, что поле anArray когда-нибудь будет приспособлено под массив с целыми числами. Чтобы связать anArray с реальным целочисленным массивом, нужно объявить его с помощью ключевого слова new :
int[] anArray = new int[10];
В примере числовое значение в квадратных скобках показывает количество слотов под элементы массива. В нашем случае мы выделяем под массив десять ячеек памяти.
int [] anArray; // объявление массива anArray = new int [20]; // выделяем память для массива
int [] intArray = new int [20]; // объединяем объявление с выделением памяти
Примечание: ячейкам в массиве, выделенным при помощи ключевого слова new , будут автоматически присвоены значения: 0 (для числового типа), false (для логического) и null (для ссылок).
Создание массива
Предположим, мы хотим создать массив целых чисел на 13 элементов. Присвоим группе элементов имя — highloadToday:
Курс Project Manager.
Впроваджуйте покроковий алгоритм управління проєктами вже зараз. У цьому вам допоможе Павло Харіков — Head of IoT у Veon Group (Kyivstar).
int[] highloadToday = new int[13];
Выведем на экран длину массива:
В консоли отобразится 13.
Аналогично создаются наборы данных других типов. Например, эта команда объявляет массив с десятью переменными типа double и присваивает ссылку firstList :
double[] firstList = new double[10];
Как узнать длину массива
Мы с вами разобрались, что длиной массива является число ячеек, выделенное для хранения данных, и эту длину невозможно будет изменить, когда массив уже создан. В Java счет элементов по порядку в массиве начинается не с единицы, а с нуля.
Как узнать длину массива
Чтобы узнать длину нашего массива, используем его свойство length . Например:
int[] anArray = new int[10]; // создаем целочисленный массив на 10 ячеек и присваиваем ему имя anArray System.out.println(anArray.length); // выводим длину нашего массива
Инициализируем массив, работаем с его элементами
Теперь мы знаем, что такое массив, но как его использовать — пока непонятно. Как загружать в него информацию, а потом ее оттуда извлекать? Давайте разбираться.
В широком смысле массив — это самая важная структура данных в программировании. Сам компьютер — это не что иное, как набор массивов. Байт — это массив из восьми двоичных разрядов, а строка — это массив символов.
Разработчики используют массивы, потому что они работают быстро и позволяют напрямую обращаться к данным отдельного элемента за один компьютерный цикл независимо от размера массива.
Из-за операционной системы, виртуальной памяти и других факторов для извлечения элемента из массива может потребоваться несколько больше, чем один фактический компьютерный цикл. Но время извлечения первого элемента такое же, как и 100-го элемента и 500-тысячного. Никакая другая созданная нами структура данных не может быть быстрее, чем массив. Все «продвинутые» системы реализованы с их использованием.
Теперь давайте выясним особенности работы с этой полезной штукой. При объявлении создается массив в каждой ячейке которого — данные по умолчанию (это мы разобрали). Чтобы записать туда необходимые нам данные, нужно провести обряд инициализации, то есть присвоить каждой ячейке определенное значение.
Например, создадим массив, содержащий в себе четыре стороны света, и заполним его значениями:
String[] sides = new String[4]; /* объявленному массиву Java выделил память для четырех строк (по умолчанию их значение будет null, потому что String относится к ссылочному типу)*/ sides[0] = "North"; /* Получив доступ к первой ячейке (с нулевым индексом), мы вписали туда строковое значение */ sides[1] = "South"; // тоже самое мы проделываем с ячейкой под индексом 1 sides[2] = "West"; // 2 sides[3] = "East"; // 3
Мы используем индексы для доступа к ячейкам массива, число в скобках обозначает каждую конкретную позицию. Если переданный при доступе к ячейке индекс — отрицательный или превышает длину массива, Java выдаст исключение ArrayIndexOutOfBoundException .
Теперь совместим инициализацию с объявлением:
String[] sides = new String[] ;
И уберем оператор new , тем самым упростив запись:
String[] sides = ;
Выводим массив в консоль
Есть несколько способов перебора массивов, один из них — циклический, например, с помощью цикла for :
String[] sides = new String[] ; for (int i = 0; i
North South West East
Многомерные Java-массивы
Массивы, у которых только один индекс называется одномерным, мы уже рассмотрели. Но в них можно помещать не только примитивные типы данных и ссылки на объекты, но и другие массивы. В таком случае их называют многомерными.
Давайте на примере выясним, что они из себя представляют. Предположим, нам нужен массив для хранения числа имеющихся свободных мест в кинотеатре. Вот визуальное представление того, о чем я говорю:
Структура многомерного массива в Java (здесь мы видим свободные места в кинотеатре)
Конечно в реальной жизни кинотеатр был бы больше, но этот нам как раз подойдет в качестве примера.
0 — означает, что место доступно, 1 — что занято. Мы также могли бы добавить еще и 2 для зарезервированных мест и так далее. Но пока ограничимся более простым примером.
Java не предоставляет никакой специальной поддержки для многомерных массивов, но мы можем легко объявить их как массив массивов. Это будет выглядеть вот так:
int [] [] cinema = новый int [5] [5];
Первое число указывает количество столбцов, второе — количество строк. Все числовые массивы в Java автоматически инициализируются нулевыми значениями после объявления. Мы только что создали таблицу, полную нулей.
Теперь давайте заполним кинозал единицами, как на картинке выше. Для создания строки из единиц используем несколько циклов for . Чтобы открыть доступ к элементам 2D-массива, мы должны ввести координаты столбцов и строк:
cinema[2][2] = 1; // центр for (int i = 1; i < 4; i++) < // четвертая строка cinema[i][3] = 1; >for (int i = 0; i < 5; i++) < // последняя строка cinema[i][4] = 1; >
Нужно иметь в виду, что если мы запросим cinema.length , он будет содержать количество столбцов (длину внешнего массива, представляющего столбцы). Чтобы определить количество строк (длину внутреннего массива), необходимо запросить cinema [0].length . Обратите внимание, что для работы должен быть хотя бы один столбец.
Мы будем вкладывать циклы по порядку, чтобы внешний цикл проходил по строкам, а внутренний — по столбцам текущей строки. После вывода строки в консоль мы должны разорвать ее, ведь оба цикла должны иметь разные управляющие переменные:
for (int j = 0; j < cinema[0].length; j++) < for (int i = 0; i < cinema.length; i++) < System.out.print(cinema[i][j]); >System.out.println(); >
00000 00000 00100 01110 11111
Иногда может быть полезно создать массив с большим количеством измерений. Например, трехмерный. Вернемся к примеру с кинотеатром. Теперь представим, что в нем несколько этажей. Схематично это будет выглядеть так:
Давайте создадим 3D-массив:
int [] [] [] cinemas = новый int [5] [5] [3];
Доступ к элементам приведенного выше трехмерного массива мы можем получить, как и раньше, через индекс, но теперь нам нужно ввести три координаты:
cinemas[3][2][1] = 1; // кинотеатр на втором этаже, третий ряд, четвертое место
В такой ситуации, если мы запросим cinemas[0][0].length , то получим количество этажей.
Работа с массивами
Продемонстрируем простейшие манипуляции с элементами массива:
public class Array < public static void main(String[] args) < int[] a = new int[4]; a[0] = 17; //Инициализация элементов массива a[1] = 15; a[2] = 8; a[3] = 8; String[] s = ; /* Инициализацию и объявление можно применять параллельно*/ String[] s2 = new String[]; /*Иногда инициализация и объявление могут применяться вместе с оператором new */ s2[0] = "Highload - "; //Изменяем первый элемент массива System.out.println(s2[0] + s2[1]); // Отображение в консоли "Highload - Today" a[2] = 5; // Компоненты массива - переменные System.out.println(a[2]); > >
Поиск в массиве по элементу
Наиболее часто встречающаяся операция с массивами — поиск по элементу. Есть много алгоритмов, позволяющих ее решить. Например, можно выбрать наиболее легкий, но и самый медленный метод поиска – линейный:
public static int linearSearch(int[] array, int elementWanted) < for (int i = 0; i < array.length; i++) < if (array[i] == elementWanted) < return i; >> return -1; >
Если наш массив уже упорядочен, можем применить другой метод. Для поиска:
- мы разделяем массив на равные части;
- смотрим на «центральный элемент» с индексом middleIndex ;
- сравниваем с разыскиваемым элементом;
- если есть совпадение — алгоритм завершаем.
К огда разыскиваемый элемент меньше «центрального элемента» мы забываем про правую часть массива, а иначе — про левую часть. Затем повторяем эти действия до обнаружения элемента или пока очередной отрезок не станет пустым. В том случае, если элемент не обнаружен, возвращается значение -1 :
public static int binarySearch(int[] array, int elementWanted) < int firstIndex = 0; int lastIndex = array.length - 1; // условие прекращения (элемент не представлен) while (firstIndex // когда центральный элемент в массиве меньше // переводим индекс в middle+1, не рассматривая первую часть else if (array[middleIndex] < elementWanted) < firstIndex = middleIndex + 1; >// если центральный элемент больше // переводим наш индекс в middle-1, не рассматривая первую часть else if (array[middleIndex] > elementWanted) < lastIndex = middleIndex - 1; >> return -1; >
Сортировка массивов
Выполнять упорядочивание массива можно используя метод .sort() класса Arrays (не забываем в начале программы добавлять import java.util.Arrays; ):
int[] highload = < 24, 7, 23, 6765, 95, 33 >; Arrays.sort(highload); System.out.println(Arrays.toString(highload));// [7, 23, 24, 33, 95, 6765]
Более подробно о различных алгоритмах сортировки массивов можете почитать в статье «Методы сортировки и их реализация в Python» . Несмотря на то, что мы писали в этой статье про Python, все алгоритмы актуальны и для Java.
Преобразование массива к строке
Иногда может возникнуть необходимость преобразования массива к строке. Есть разные способы решения данной задачи. Например, обратиться к статическому методу join() класса String , который объединяет элементы массива. В этом примере элементы массива отделяются при помощи указанным параметром — разделителем:
String[] words = ["Highload", "Today"]; // Разделитель может быть пустой строкой String.join("", words); // "HighloadToday" String.join(", ", words); // "Highload, Today"
Java.util.Arrays: готовые решения для обработки массивов
Наиболее часто используемые операции по работе с java-массивами:
- сортировка;
- поиск нужного элемента;
- преобразование массива в строку.
Одним из самых удобных способов решения такого рода задач является использование класса Arrays пакета java.util. Рассмотрим на примере их реализацию:
class Main < public static void main(String[] args) < int[] test = ; //объявление и инициализация массива System.out.println(test); //попытка вывода нашего массива в консоль (результат 16-ричное число) System.out.println(Arrays.toString(test)); //выводим в консоль массив при помощи метода toString и радуемся правильному результату Arrays.sort(test, 0, 4); //сортировка массива от 0-й до 4-й ячейки System.out.println(Arrays.toString(test)); //выводим результат сортировки int keyArray = Arrays.binarySearch(test, 8); // поиск keyArray - т.е. числа 8 в отсортированном массиве, метод binarySearch выдает индекс искомого элемента System.out.println(keyArray); //выводим в консоль этот индекс System.out.println(Arrays.binarySearch(test, 0)); //пробуем найти элемент, отсутствующий в массиве и выводим результат в консоль > >
[I@1540e19d [1 , 5 , 4 , 3 , 7] [1, 3, 4, 5, 7] 3 -1
Заключение
- Массив — это объект-контейнер, содержащий в себе установленное при создании количество значений определенного типа, которое не может быть впоследствии изменено.
- Нумерация элементов массива начинается с нуля.
- Доступ к ячейкам массива легко получить по его индексу.
- Наиболее удобные инструменты для обработки массивов предоставляет класс Java.util.Arrays.
Теперь вы можете самостоятельно управлять в языке Java таким важным математическим инструментом. Если вы желаете закрепить полученные знания, рекомендуем вам посмотреть видео, в котором подробно разобран ряд задач, связанных с одномерными и многомерными массивами в Java:
Курс Микросервисная архитектура.
програма, яка допоможе опанувати головні принципи розробки мікросервісної архітектури, щоби ви могли проєктувати незалежні сервіси, а потім інтегрувати їх в одну систему. Практики буде багато.
Что такое массивы в Java и как с ними работать
Массив — это набор однотипных элементов, упорядоченных по номерам.
Анастасия Хамидулина
Автор статьи
7 июня 2022 в 14:40
В жизни мы часто сталкиваемся с массивами — например, жилыми или лесными. То есть совокупностью множества однородных предметов. Чтобы разделять элементы, им иногда присваиваются номера: в жилом массиве после названия улицы идет номер дома, корпуса.
Это справедливо и для массивов в программировании — набора однотипных элементов, расположенных в памяти друг за другом.
Зачем нужны массивы в Java
Без массивов, чтобы работать с набором однотипных данных, для каждого элемента объявляли бы отдельную переменную. Каждый раз устанавливали бы правила именования таких переменных, чтобы в них не запутаться. Запоминали бы, сколько переменных уже создали.
При этом компилятору нужно было бы понимать, что с набором объявленных в разных местах переменных вы хотите работать как с единым целым. Располагать их в памяти рядом друг с другом, чтобы эффективно записывать и читать значения. Массивы же упрощают такое количество работы.
С циклами и массивами студентов знакомят в первом блоке курса Skypro «Java-разработчик». Это необходимый минимум теории, чтобы начать писать код. Дальше начнете применять знания на практике, разработаете собственное приложение, которое сможете положить в портфолио. А центр карьеры подскажет, как лучше составить резюме, и подготовит к собеседованию, чтобы найти работу по новой профессии еще до окончания курса.
Объявление массива в Java
Чтобы начать работу с массивом, первым делом его нужно объявить — как и обычную переменную. Это выглядит так:
double[] myFancyArray;
Идущие подряд открывающая и закрывающая квадратные скобки сообщают компилятору, что переменная — массив. Тип элементов задает стоящий перед скобками оператор. Это может быть любой из поддерживаемых в Java примитивных типов данных, например int, byte, char, название класса или перечисления — enum. В нашем примере массив будет состоять из вещественных чисел.
Допустима форма объявления, где скобки ставят после названия переменной:
double myFancyArray[];
Такая форма объявления массива пришла в Java из языка C, но ее употребляют редко.
Создание массива в Java
После объявления массива его нужно создать. На этом этапе сообщают компилятору необходимый размер. С точки зрения компилятора Java-массив — это объект. Поэтому его, как и объект, создают при помощи ключевого слова new. Общий синтаксис:
new имя_массива[длина_массива];
Объявление и создание массива может быть описано одной строкой:
double[] myFancyArray = new double[5];
Или с помощью отдельных операторов:
double[] myFancyArray; myFancyArray = new double[5];
Станьте Java-разработчиком в два раза быстрее
Ускоренный курс для тех, кто хочет быстрее перейти на удаленку
Чтение и запись элементов
Массив — это пронумерованный набор. Доступ к каждому элементу осуществляют по его номеру (индексу). Нумерация элементов массива начинается с нуля, а не с единицы, поэтому первый элемент массива будет с индексом 0, а последний — «длина_массива — 1».
Нумерация элементов массива
Общий синтаксис оператора доступа к элементу массива:
имя_массива[индекс элемента]
Пример чтения значения элемента:
System.out.println(myFancyArray[3]);
Пример записи значения элемента:
myFancyArray[4] = 1.5;
Инициализация массива в Java
Чтобы выполнять действия, заполните массив нужными значениями — инициализируйте. Сделать это можно несколькими способами.
✔️ Поочередно записывать значения в каждый элемент массива:
myFancyArray[0] = 0.5; myFancyArray[1] = 1.0; myFancyArray[2] = 1.5; myFancyArray[3] = 2.0;
✔️ С помощью цикла:
for (int i=0; i
✔️ Когда создаете массив:
double[] myFancyArray = new double[] ;
или без new:
double[] myFancyArray = ;
Длина массива
Не нужно указывать длину массива при инициализации в момент объявления. Компилятор выведет ее из количества значений в выражении.
❗ Важно: когда вы создадите массив, изменить длину уже не получится. Если захотите, чтобы массив был длиннее, придется создать новый и скопировать в него значения старого. Затем присвоить переменной значение нового массива.
Немного упростит операцию статический метод arraycopy из утилитарного класса System.Синтаксис метода:
System.arraycopy(src, srcPos, dest, destPos, length);
src — старый массив;
srcPos — позиция в старом массиве, с которой начинают чтение;
dest — новый массив;
destPos — позиция в новом массиве, с которой начинают запись;
length — количество элементов, которые надо прочитать из старого массива.
Так увеличивают длину массива:
double[] values = new double[2]; values[0] = 1.0; values[1] = 1.5; double[] tmpValues = new double[3]; System.arraycopy(values, 0, tmpValues, 0, values.length); values = tmpValues;
Чтобы узнать длину массива, прочитайте значение переменной length, ассоциированной с ним:
int arrayLength = myFancyArray.length; System.out.printLn(arrayLength);
Значение длины поможет в работе с циклом for:
double[] myFancyArray = new double[5]; for (int i = 0; i
Вывод массива
Удобно пользоваться оператором цикла for:
String[] weekDays = ; for (int i = 0; i
В версиях Java после 1.6 доступен оператор foreach:
String[] weekDays = ; for (String weekDay: weekDays)
В Java после версии 1.8 появились Stream API — стримы, которые тоже упрощают работу. Преобразовать массив в стрим поможет статический метод stream в утилитарном классе Arrays.
String[] weekDays = ; Arrays.stream(weekDays).forEach(weekDay -> System.out.println(weekDay) );
Результат вывода массива
Одномерные и многомерные Java-массивы
Типом элемента массива может быть любой тип данных, который поддерживает язык программирования. В случае с Java тип элемента — объект. Массив — это тоже объект. Поэтому ничто не мешает объявить в качестве переменной массив массивов:
double[][] myMatrixArray;
Такой массив называют двумерным, или матрицей. Простой же массив, где элемент — не другой массив, считают одномерным. Структуру двумерного массива можно представить в виде таблицы:
Вы получите доступ к элементу такого массива, если укажете номер строки и столбца этой таблицы:
myMatrixArray[i][j] = 3.4;
i — номер строки, а j — номер столбца
При этом выражение myMatrixArray.length вернет количество строк в таблице. А с помощью выражения myMatrixArray[0].length получите количество столбцов в строке.
Объявляют двумерный массив, в котором элементы опять будут массивом, так:
double[][][] myCubeArray;
Такой массив называют трехмерным, или кубом. Для доступа к элементу укажите уже три индекса.
Можно объявлять и четырех-, пяти- и десятимерные массивы. Максимальное количество измерений ограничено спецификацией Java — 255. Это объявление переменной выдаст ошибку компиляции:
double[][][][][][][][][][][][][][][][] [][][][][][][][][][][][][][][][] [][][][][][][][][][][][][][][][] [][][][][][][][][][][][][][][][] [][][][][][][][][][][][][][][][] [][][][][][][][][][][][][][][][] [][][][][][][][][][][][][][][][] [][][][][][][][][][][][][][][][] [][][][][][][][][][][][][][][][] [][][][][][][][][][][][][][][][] [][][][][][][][][][][][][][][][] [][][][][][][][][][][][][][][][] [][][][][][][][][][][][][][][][] [][][][][][][][][][][][][][][][] [][][][][][][][][][][][][][][][] [][][][][][][][][][][][][][][][] myUberArray;
Ошибка появится, потому что количество измерений объявленного массива равно 256.
Ошибка компиляции при попытке объявить массив, у которого слишком много измерений
Методы для работы с массивами
Стандартная библиотека Java предоставляет набор методов, которые помогают работать с массивами. Они представлены как статические методы в утилитарном классе Arrays.
Преобразование к строке
Чтобы вывести массив на печать, воспользуйтесь методом Arrays.toString(a). Он преобразует массив в строку со значениями всех элементов массива, разделенных запятой. Начало и конец будут обозначены квадратными скобками.
int[] myArray = new int[] ; System.out.println(Arrays.toString(myArray));
Результат преобразования массива к строке
Сортировка
Arrays.sort(a) отсортирует массив a в порядке возрастания значений элементов. Если нужно отсортировать в другом порядке, воспользуйтесь методом Arrays.sort(a, Comparator c), где Comparator c — экземпляр класса Comparator, который позволяет сравнивать два соседних элемента.
int[] myArray = new int[] < 6, 4, 3, 5 >; Arrays.sort( myArray ); System.out.println( Arrays.toString( myArray ) );
Результат сортировки массива
Чтобы заполнить массив одинаковыми значениями и не писать цикл, воспользуйтесь методом Arrays.fill(a, val). Он присвоит всем элементам массива a значение val.
Можно заполнить не весь массив, а только какую-то его часть: Arrays.fill(a, from, to, val). Метод присвоит элементам массива a значение val, начиная с элемента с индексом from и заканчивая элементом с индексом to-1.
int[] myArray = new int[ 10 ]; Arrays.fill( myArray, 7 ); System.out.println( Arrays.toString( myArray ) );
Результат заполнения массива значением 7
Стандартная библиотека Java предоставляет и другие методы работы. Изучайте их в документации класса Arrays.
Что такое массивы в java
Руководство по массивам
Руководство по массивам в Java
Введение
Для хранения данных, используемых при работе программы, применяются переменные того или иного типа. Например, если требуется сохранить имя игрока, то создается переменная String name, если целочисленное значение, то int number и т. д. Когда таких значений немного или их количество заранее известно, то для них приемлемо использовать отдельные переменные.
Но что делать, когда в программе задействовано не одно, а 10 чисел, или их количество становится известно только на этапе запуска приложения, когда пользователь вводит его с клавиатуры? Или в какой-то игре может участвовать разное количество игроков, устанавливаемое при ее старте. В таких ситуациях отдельными переменными уже не обойтись, т. к. их точное количество будет невозможно определить. Да и, если все же попытаться это сделать, код станет громоздким и не универсальным, а работа с ним будет крайне ограниченной из-за невозможности использования цикла для автоматизированной обработки данных.
Вот тут-то и приходит на выручку такая структура данных как массив, которая позволяет хранить в себе значения одного типа, что значительно упрощает их обработку.