Массивы в Java

Массивы — одна из важных структур данных для каждого языка программирования. Конечно, в разных языках разные реализации и обработка массивов.

Массивы, предоставляемые в языке Java, используются для хранения фиксированного количества элементов одного типа.

Вы можете объявить переменную массива, например numbers

В этом руководстве будут представлены объявление, создание и инициализация массивов Java, а также приведён соответствующий код.


Объявление переменных массива

Сначала необходимо объявить переменную массива, прежде чем использовать массив в программе. Ниже приведён синтаксис объявления переменной массива:

dataType[] arrayRefVar; //Предпочтительный методилиdataType arrayRefVar[]; //Тот же эффект, но не предпочтительный метод

Примечание:Рекомендуется использоватьdataType[] arrayRefVarстиль объявления для объявления переменных массива. Стиль dataType arrayRefVar[] происходит из языка C/C++. Он принят в Java, чтобы программисты C/C++ могли быстро понять язык Java.

Пример

Ниже приведены примеры кода для этих двух синтаксисов:

double[] myList; //Предпочтительный методилиdouble myList[]; //Тот же эффект, но не предпочтительный метод

Создание массива

В языке Java для создания массивов используется оператор new. Синтаксис следующий:

arrayRefVar = new dataType[arraySize];

Приведённая выше синтаксическая конструкция выполняет две вещи:

  • Во-первых, она создаёт массив с помощью dataType[arraySize].
  • Во-вторых, она присваивает ссылку на только что созданный массив переменной arrayRefVar.

Объявление переменной массива и создание массива можно выполнить в одном операторе, как показано ниже:

dataType[] arrayRefVar = new dataType[arraySize];

Кроме того, массив можно также создать следующим образом.

dataType[] arrayRefVar = {value0, value1, ..., valuek};

Доступ к элементам массива осуществляется по индексу. Индексы массива начинаются с 0, поэтому значения индексов находятся в диапазоне от 0 до arrayRefVar.length-1.

Пример

Следующий оператор сначала объявляет переменную массива myList, затем создаёт массив, содержащий 10 элементов типа double, и присваивает его ссылку переменной myList.

Код файла TestArray.java:

public class TestArray { public static void main(String[] args) { //Размер массива int size = 10; //Определить массив double[] myList = new double[size]; myList[0] = 5.6; myList[1] = 4.5; myList[2] = 3.3; myList[3] = 13.2; myList[4] = 4.0; myList[5] = 34.33; myList[6] = 34.0; myList[7] = 45.45; myList[8] = 99.993; myList[9] = 11123; //Вычислить сумму всех элементов double total = 0; for (int i = 0; i < size; i++) { total += myList[i]; } System.out.println("Сумма равна:" + total); } }

Вывод приведенного выше примера:

总和为: 11367.373

На следующем рисунке изображён массив myList. Здесь массив myList содержит 10 элементов типа double, а его индексы находятся в диапазоне от 0 до 9.

java数组结构说明


Обработка массивов

Тип элементов и размер массива фиксированы, поэтому при обработке элементов массива мы обычно используем базовый цикл или цикл For-Each.

Пример

Этот пример полностью демонстрирует, как создавать, инициализировать и обрабатывать массивы:

Код файла TestArray.java:

public class TestArray { public static void main(String[] args) { double[] myList = {1.9, 2.9, 3.4, 3.5}; //Вывести все элементы массива 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
Total is 11.7
Max is 3.5

Цикл For-Each

В JDK 1.5 появился новый тип цикла, называемый циклом For-Each или расширенным циклом, который позволяет обходить массивы без использования индексов.

Формат синтаксиса следующий:

for(type element: array)
{
    System.out.println(element);
}

Пример

Этот пример используется для отображения всех элементов массива myList:

Код файла TestArray.java:

public class TestArray { public static void main(String[] args) { double[] myList = {1.9, 2.9, 3.4, 3.5}; //Вывести все элементы массива 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[]{3, 1, 2, 6, 4, 2});

Массивы как возвращаемые значения функций

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; }

В приведенном выше примере массив result используется как возвращаемое значение функции.


Многомерные массивы

Многомерные массивы можно рассматривать как массивы массивов. Например, двумерный массив — это особый одномерный массив, где каждый элемент является одномерным массивом, например:

String[][] str = new String[3][4];

Динамическая инициализация многомерных массивов (на примере двумерного массива)

1. Прямое выделение памяти для каждого измерения, формат следующий:

type[][] typeName = new type[typeLength1][typeLength2];

type может быть базовым типом данных или составным типом данных. typeLength1 и typeLength2 должны быть положительными целыми числами. typeLength1 — это количество строк, а typeLength2 — количество столбцов.

Например:

int[][] a = new int[2][3];

Анализ:

Двумерный массив a можно рассматривать как массив с двумя строками и тремя столбцами.

2. Начиная с самой старшей размерности, выделите память для каждой размерности отдельно, например:

String[][] s = new String[2][]; s[0] = new String[2]; s[1] = new String[3]; s[0][0] = new String("Good"); s[0][1] = new String("Luck"); s[1][0] = new String("to"); s[1][1] = new String("you"); s[1][2] = new String("!");

Анализ:

s[0]=new String[2]иs[1]=new String[3]Это выделяет пространство для ссылок для самой старшей размерности, то есть ограничивает максимальную длину данных, которые может хранить самая старшая размерность, а затем отдельно выделяет пространство для каждого из его элементов массива.s0=new String("Good")и другие операции.

Обращение к многомерным массивам (на примере двумерного массива)

Для каждого элемента в двумерном массиве способ обращения —arrayName[index1][index2], например:

num[1][0];

Класс Arrays

Класс java.util.Arrays позволяет удобно работать с массивами. Все предоставляемые им методы являются статическими.

У него есть следующие функции:

  • Присваивание значений массиву: с помощью метода fill.
  • Сортировка массива: с помощью метода sort, в порядке возрастания.
  • Сравнение массивов: используйте метод equals, чтобы сравнить, равны ли значения элементов в массивах.
  • Поиск элементов массива: метод binarySearch может выполнять бинарный поиск в отсортированном массиве.

Подробные инструкции см. в следующей таблице:

Нет. Метод и описание
1 public static int binarySearch(Object[] a, Object key)
Ищет объект с заданным значением в заданном массиве с помощью алгоритма бинарного поиска (Byte, Int, double и т. д.). Перед вызовом массив должен быть отсортирован. Если искомое значение содержится в массиве, возвращается индекс ключа поиска; в противном случае возвращается (-(точка вставки) - 1).
2 public static boolean equals(long[] a, long[] a2)
Если два указанных массива типа longравны, возвращается true. Если два массива содержат одинаковое количество элементов и все соответствующие пары элементов в двух массивах равны, то два массива считаются равными. Другими словами, если два массива содержат одинаковые элементы в одинаковом порядке, то два массива равны. Тот же метод применяется ко всем другим базовым типам данных (Byte, short, Int и т.д.).
3 public static void fill(int[] a, int val)
Присваивает указанное значение int каждому элементу в указанном диапазоне указанного массива int. Тот же метод применяется ко всем другим базовым типам данных (Byte, short, Int и т.д.).
4 public static void sort(Object[] a)
Сортирует указанный массив объектов в порядке возрастания в соответствии с естественным порядком его элементов. Тот же метод применяется ко всем другим базовым типам данных (Byte, short, Int и т.д.).

Упражнения

Тест по Java Arrays

Другие расширения