Массивы (Array) в Java

View more categories:

1- Что такое массив?

В Java, Массив (array) это набор элементов с одним видом данных, с последовательными адресами в памяти (memory). Массив имеет фиксированное количество элементов и вы не можете поменять его размер.
Элементы массива отмечены индексами (index), начиная от индекса 0. Вы можете получить доступ в его элементы через индекс.
Псмотрим картину массив с  5 элементами, содержащие вид int.
Помимо одномерного массива, иногда вам придется работать с двумерным или с многомерным массивом. Для двумерного массива, его элементы будут отмечены двумя индексами, индекс линии и индекс столбца. Ниже является изображение двумерного массива.

2- Одномерный массив

Как объявить массив в Java.
** Syntax **
// Объявить массив, не определяя количество элементов.
int[] array1;

// Объявить массив с 100 элементами
// Элементам еще не прикреплено определенное значение
array1 = new int[100];

// Объявить массив, определяя точное количество элементов.
// Элементам еще не прикреплено определенное значение
double[] array2 = new double[10];

// Объявить массив с элементами, к которым прикреплены определенные значения.
// Массив имеет 4 элемента
long[] array3= {10L, 23L, 30L, 11L};
Посмотрим пример:
ArrayExample1.java
package org.o7planning.tutorial.javabasic.array;

public class ArrayExample1 {

	public static void main(String[] args) {

		// Объявить массив с 5 элементами
		int[] myArray = new int[5];

		// Примечание: первый элемент массива имеет индекс 0:
		// Прикрепить значение первому элементу (Индекс 0)
		myArray[0] = 10;

		// Прикрепить значение второму элементу (Индекс 1)
		myArray[1] = 14;

		myArray[2] = 36;
		myArray[3] = 27;

		// Прикрепить значение 5-му элементу (Последний элемент в массиве)
		myArray[4] = 18;

		// Распечатать на экране Console количество элементов массива.
		System.out.println("Array Length=" + myArray.length);

		// Распечатать элемент индекса 3 (4-ый элемент в массиве)
		System.out.println("myArray[3]=" + myArray[3]);

		// Использовать цикл for, чтобы распечатать элементы в массиве.
		for (int index = 0; index < myArray.length; index++) {
			System.out.println("Element " + index + " = " + myArray[index]);
		}
	}

}
Результат:
Пример изображает использоватние цикла для прикрепления значений элементам:
ArrayExample2.java
package org.o7planning.tutorial.javabasic.array;

public class ArrayExample2 {

	public static void main(String[] args) {

		// Объявить массив с 5-ю элементами
		int[] myArray = new int[5];

		// Распечатать на экране Console количество элементов массива.
		System.out.println("Array Length=" + myArray.length);

		// Использовать цикл for чтобы прикрепить значение для элементов массива.
		for (int index = 0; index < myArray.length; index++) {
			myArray[index] = 100 * index * index + 3;
		}

		// Распечатать на экране Console элемент индекса 3
		System.out.println("myArray[3] = " + myArray[3]);
	}

}
Результат:

3- Одномерный массив и цикл for-each

Java 5 предоставляет вам цикл  for-each, данный цикл помогает вам перемещать (traverse) все элементы массива, не используя переменную индекса.
Например:
ArrayForeachExample.java
package org.o7planning.tutorial.javabasic.array;

public class ArrayForeachExample {

	public static void main(String[] args) {

		// Объявить массив String.
		String[] fruits = new String[] { "Apple", "Apricot", "Banana" };

		// Использовать цикл for-each для перемещения элементов массива.
		for (String fruit : fruits) {

			System.out.println(fruit);

		}

	}

}
Запуск примера:

4- Утилитарные методы для одномерного массива

Примечание: Вам нужно иметь знание про класс и методы перед тем как просматривать данную часть. Если нет, вы можете пока пропустить это.
Java предоставляет вам нкоторые статические методы для массивов, например расположить массивы, прикрепить значения для всех элементов массива, поиск, сравнение массивов... Эти методы определены в классе  Arrays.
Ниже являются некоторые статические методы, на самом деле полезные определенные в классе Arrays. Данные методы применяются для массивов элементов вида  byte, char, double, float, long, int, short, boolean
Смотрите так же:
  • TODO Link!
* Arrays *
// Передать параметры одного вида, и вернуть один список (List).
public static <T> List<T> asList(T... a)

// Вид X может быть: byte, char, double, float, long, int, short, boolean
----------------------

// Найти индекс значения появляющегося в массиве.
// (Использовать оператор бинарного поиска (binary search))
public static int binarySearch(X[] a, X key)

// Скопировать элементы одного массива, чтобы создать новый массив с определенной длиной.
public static int[] copyOf(X[] original, X newLength)

// Скопировать определнную рамку элементов массива для создания нового массива
public static double[] copyOfRange(X[] original, int from, int to)

// Сравнить два массива
public static boolean equals(X[] a, long[] a2)

// Прикрепить одно значение для всех элементов массива.
public static void fill(X[] a, X val)

// Поменять массив на строку (string)
public static String toString(X[] a)
В примере ниже используются некоторые статические методы класса Arrays.
ArraysExample.java
package org.o7planning.tutorial.javabasic.array;

import java.util.Arrays;
import java.util.List;

public class ArraysExample {

	public static void main(String[] args) {

		int[] years = new int[] { 2001, 1994, 1995, 2000, 2017 };

		// Сортировать
		Arrays.sort(years);

		for (int year : years) {
			System.out.println("Year: " + year);
		}

		// Конвертировать массив в строку
		String yearsString = Arrays.toString(years);

		System.out.println("Years: " + yearsString);

		// Создать список (List) из некоторых значений.
		List<String> names = Arrays.asList("Tom", "Jerry", "Donald");

		for (String name : names) {
			System.out.println("Name: " + name);
		}

	}

}

5- Двумерный массив

Очень часто вам приходится работать с массивом, обычно с одномерным массивом, но в случае когда вы хотите работать с данными в виде таблицы, со многими столбцами и строками, стоит использовать двумерный массив. Например двумерный массив поможет вам сохранить информацию шахматных фигур на доске.
Строки и столбцы двумерного массива индексированы 0, 1, 2,.... Чтобы получить доступ в элемент двумерного массива, вам нужно получить доступ по 2 индексам: индекс строки и индекс столбца.
length является свойством (property) массива, в случае двумерного массива, данное свойство является количеством строк в массиве.
У вас есть 3 способа для объявления двумерного массива.
// Объявить массив с 5 строками, 10 столбцами
MyType[][] myArray1 = new MyType[5][10]; 

// Объявить двумерный массив с 5 строками.
// (Массив массива)
MyType[][] myArray2 = new MyType[5][]; 

// Объявить двумерный массив, определить значение элементов.
MyType[][] myArray3 = new MyType[][] {

    { value00, value01, value02 , value03 }, 
    { value10, value11, value12 } 
};

// ** Примечание:
// MyType может быть примитивным видом (byte, char, double, float, long, int, short, boolean)
// или ссылочным видом.
Если вы хотите объявить массив примитивного вида ( byte, char, double, float, long, int, short, boolean), элементам не определено значение, они будут иметь значение по умолчанию
  • Значение по умолчанию 0 соответствует видам byte, double, float, long, int, short.
  • Значение по умолчанию​​​​​​​ false соответствует​​​​​​​ виду boolean.
  • Значение по умолчанию​​​​​​​ '\u0000' (Символ null) соответствует​​​​​​​ виду char.
Наоборот, если вы объявили массив ссылчного вида, если один элемент массива не имеет определенного значения, то он будет иметь значе по умолчанию это null.
Пример:
TwoDimensionalExample1.java
package org.o7planning.tutorial.javabasic.array;

public class TwoDimensionalExample1 {

	public static void main(String[] args) {

		// Объявить двумерный массив с 2 строками, 3 столбцами
		// Элементы имеют значение по умолчанию
		int[][] myArray = new int[2][3];
		
		// Количество строк двумерного массива.
		System.out.println("Length of myArray: "+ myArray.length); // ==> 2

		// Print out
		for (int row = 0; row < 2; row++) {

			for (int col = 0; col < 3; col++) {
				System.out.println("myArray[" + row + "," + col + "]=" + myArray[row][col]);
			}
		}
		System.out.println(" --- ");

		// Прикрепить значение элементам.
		for (int row = 0; row < 2; row++) {

			for (int col = 0; col < 3; col++) {
				myArray[row][col] = (row + 1) * (col + 1);
			}
		}

		// Print out
		for (int row = 0; row < 2; row++) {

			for (int col = 0; col < 3; col++) {
				System.out.println("myArray[" + row + "," + col + "]=" + myArray[row][col]);
			}
		}

	}

}

Двумерный массив на самом деле является массивом массива.

В Java двумерный массив на самом деле является массивом массива, поэтому вы можете объявить двумерный массив только определяя количество строк, не нужно определять количество количество столбцов. Потому что двумерный массив является  "Массивом массива" поэтому свойство  length двумерного массива вернет количество строк массива.
TwoDimensionalExample2.java
package org.o7planning.tutorial.javabasic.array;

public class TwoDimensionalExample2 {

	public static void main(String[] args) {

		// Объявить двумерный массив,определяя элементы массива.
		String[][] teamAndPlayers = new String[][] { 
			    { "Sam", "Smith", "Robert" }, // US Players
				{ "Tran", "Nguyen" }          // Vietnam Players
		};

		String[] usPlayers = teamAndPlayers[0];
		String[] vnPlayers = teamAndPlayers[1];
		
		System.out.println("Team count: " + teamAndPlayers.length); // ==> 2

		System.out.println("Us Players count:" + usPlayers.length); // ==> 3
		System.out.println("Vn Players count:" + vnPlayers.length); // ==> 2

		for (int row = 0; row < teamAndPlayers.length; row++) { 

			String[] players = teamAndPlayers[row];

			for (int col = 0; col < players.length; col++) {
				System.out.println("Player at[" + row + "][" + col + "]=" + teamAndPlayers[row][col]);
			}

		}

	}
}
Пример:
TwoDimensionalExample3.java
package org.o7planning.tutorial.javabasic.array;

public class TwoDimensionalExample3 {

	public static void main(String[] args) {

		// Объявить двумерный массив (Массив массива)
		// Имеет 2 строки.
		String[][] teamAndPlayers = new String[2][];
		
		// US Players
		teamAndPlayers[0] = new String[]{ "Sam", "Smith", "Robert" };
		
		// Vietnam Players
		teamAndPlayers[1] = new String[]{ "Tran", "Nguyen" };
	 
  
		for (int row = 0; row < teamAndPlayers.length; row++) { 

			String[] players = teamAndPlayers[row];

			for (int col = 0; col < players.length; col++) {
				System.out.println("Player at[" + row + "][" + col + "]=" + teamAndPlayers[row][col]);
			}

		}

	}
}

View more categories: