Массивы — одна из важных структур данных для каждого языка программирования. Конечно, разные языки реализуют и обрабатывают массивы по-разному.
Массивы, предусмотренные в языке Java, используются для хранения элементов фиксированного размера одного и того же типа.
Вы можете объявить переменную-массив, например, Numbers[100] вместо прямого объявления 100 независимых переменных Number0, Number1, ...., Number99.
В этом руководстве вы познакомитесь с объявлением, созданием и инициализацией массивов Java и получите соответствующий код.
Переменные массива должны быть сначала объявлены, прежде чем массив можно будет использовать в программе. Ниже приведен синтаксис объявления переменных массива:
dataType[]arrayRefVar;//首选的方法或dataTypearrayRefVar[];//效果相同,但不是首选方法
Примечание. Для объявления переменных массива рекомендуется использовать стиль объявления dataType[] arrayRefVar. Стиль dataType arrayRefVar[] заимствован из языка C/C++ и принят в Java, чтобы позволить программистам C/C++ быстро понять язык Java.
Вот примеры кода для обоих синтаксисов:
double[]myList;//首选的方法或doublemyList[];//效果相同,但不是首选方法
Язык Java использует оператор new для создания массива. Синтаксис следующий:
arrayRefVar=newdataType[arraySize];
Приведенный выше синтаксический оператор делает две вещи:
1. Создайте массив, используя dataType[arraySize].
2. Присвойте ссылку на вновь созданный массив переменной arrayRefVar.
Объявление переменных массива и создание массива можно выполнить одним оператором, как показано ниже:
dataType[]arrayRefVar=newdataType[arraySize];
Кроме того, вы также можете создать массив, используя следующий метод.
dataType[]arrayRefVar={value0,value1,...,valuek};
Доступ к элементам массива осуществляется по индексу. Индексация массива начинается с 0, поэтому значения индекса варьируются от 0 до arrayRefVar.length-1.
Затем, когда массив освободит место, вы можете действовать следующим образом:
Пример: определение массива int
public class ArrayDemo { public static void main(String args[]) { int data[] = new int[3]; /*开辟了一个长度为3的数组*/ data[0] = 10; // 第一个元素 data[1] = 20; // 第二个元素 data[2] = 30; // 第三个元素 for(int x = 0; x < data.length; x++) { System.out.println(data[x]); //通过循环控制索引 } } }
Помимо объявления и выделения пространства, сам массив имеет еще один режим выделения.
Пример. Используйте пошаговый режим, чтобы освободить пространство массива.
public class ArrayDemo { public static void main(String args[]) { int data[] = null; data = new int[3]; /*开辟了一个长度为3的数组*/ data[0] = 10; // 第一个元素 data[1] = 20; // 第二个元素 data[2] = 30; // 第三个元素 for(int x = 0; x < data.length; x++) { System.out.println(data[x]); //通过循环控制索引 } } }
Но обязательно помните, что массивы являются ссылочными типами данных, поэтому пространство должно быть выделено (создано экземпляром) перед использованием массива. Если используется массив без выделенного пространства, обязательно появится сообщение NullPointerException
:
public class ArrayDemo { public static void main(String args[]) { int data[] = null; System.out.println(data[x]); } }
Этот принцип точно такой же, как и то, что объяснялось ранее.
Массивы обязательно будут использоваться при разработке, но операции, подобные описанным выше, встречаются редко. В будущих реальных разработках концепция массива будет использоваться чаще, а при прямом использовании в большинстве случаев это просто вывод цикла for.
Определяются тип элемента массива и размер массива, поэтому при обработке элементов массива мы обычно используем базовый цикл или цикл foreach.
Этот пример полностью демонстрирует, как создавать, инициализировать массивы и манипулировать ими:
publicclassTestArray{ publicstaticvoidmain(String[]args){ double[]myList={1.9,2.9,3.4,3.5}; //打印所有数组元素for(inti=0;i<myList.length;i++){ System.out.println(myList[i]+""); } //计算所有元素的总和doubletotal=0; for(inti=0;i<myList.length;i++){ total+=myList[i]; } System.out.println("Totalis"+total); //查找最大元素doublemax=myList[0]; for(inti=1;i<myList.length;i++){ if(myList[i]>max)max=myList[i]; } System.out.println("Maxis"+max); } }
Результаты компиляции и запуска приведенного выше примера следующие:
1.9 2.9 3.4 3.5 Totalis11.7 Maxis3.5
В JDK 1.5 появился новый тип цикла, называемый циклом foreach или расширенным циклом, который выполняет итерацию по массиву без использования индексов.
Формат синтаксиса следующий:
for(type element: array){ System.out.println(element); }
Этот пример используется для отображения всех элементов массива myList:
publicclassTestArray{ publicstaticvoidmain(String[]args){ double[]myList={1.9,2.9,3.4,3.5}; //打印所有数组元素for(doubleelement:myList){ System.out.println(element); } } }
Результаты компиляции и запуска приведенного выше примера следующие:
1.9 2.9 3.4 3.5
Массивы можно передавать в качестве параметров методам. Например, следующий пример представляет собой метод, который печатает элементы массива int.
publicstaticvoidprintArray(int[]array){ for(inti=0;i<array.length;i++){ System.out.print(array[i]+""); } }
В следующем примере вызывается метод printArray для вывода чисел 3, 1, 2, 6, 4 и 2:
printArray(newint[]{3,1,2,6,4,2});
publicstaticint[]reverse(int[]list){ int[]result=newint[list.length]; for(inti=0,j=result.length-1;i<list.length;i++,j--){ result[j]=list[i]; } returnresult; }
В приведенном выше примере массив результатов используется в качестве возвращаемого значения функции.
Класс java.util.Arrays может удобно работать с массивами, и все предоставляемые им методы являются статическими. Имеет следующие функции:
Присвойте значение массиву: с помощью метода fill.
Сортировка массива: используйте метод сортировки в порядке возрастания.
Сравнение массивов: используйте метод равенства, чтобы сравнить, равны ли значения элементов в массиве.
Поиск элементов массива. МетодbinarySearch может выполнять операцию двоичного поиска в отсортированном массиве.
Подробные инструкции см. в таблице ниже:
серийный номер | Методы и инструкции |
---|---|
1 | public static intbinarySearch(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 каждому элементу в указанном диапазоне указанного массива типа int. Тот же подход работает для всех остальных базовых типов данных (Byte, short, Int и т. д.). |
4 | public static void sort(Object[] a) сортирует указанный массив объектов в порядке возрастания в соответствии с естественным порядком его элементов. Тот же подход работает для всех остальных базовых типов данных (Byte, short, Int и т. д.). |