Как мне объявить и инициализировать массив в Java? - PullRequest
1866 голосов
/ 29 июля 2009

Как мне объявить и инициализировать массив в Java?

Ответы [ 23 ]

2479 голосов
/ 29 июля 2009

Вы можете использовать либо объявление массива, либо литерал массива (но только если вы сразу же объявляете переменную и воздействуете на нее, литералы массива не могут использоваться для переназначения массива).

Для примитивных типов:

int[] myIntArray = new int[3];
int[] myIntArray = {1, 2, 3};
int[] myIntArray = new int[]{1, 2, 3};

Для классов, например String, то же самое:

String[] myStringArray = new String[3];
String[] myStringArray = {"a", "b", "c"};
String[] myStringArray = new String[]{"a", "b", "c"};

Третий способ инициализации полезен, когда вы сначала объявляете массив, а затем инициализируете его. Актерский состав необходим здесь.

String[] myStringArray;
myStringArray = new String[]{"a", "b", "c"};
255 голосов
/ 10 июля 2013

Существует два типа массивов.

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

Синтаксис для значений по умолчанию:

int[] num = new int[5];

или (менее предпочтительно)

int num[] = new int[5];

Синтаксис с заданными значениями (инициализация переменной / поля):

int[] num = {1,2,3,4,5};

или (менее предпочтительно)

int num[] = {1, 2, 3, 4, 5};

Примечание: для удобства предпочтительным является int [] num, поскольку он четко говорит о том, что вы говорите здесь о массиве. Иначе без разницы. Совсем нет.

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

Декларация

int[][] num = new int[5][2];

Или

int num[][] = new int[5][2];

Или

int[] num[] = new int[5][2];

инициализация

 num[0][0]=1;
 num[0][1]=2;
 num[1][0]=1;
 num[1][1]=2;
 num[2][0]=1;
 num[2][1]=2;
 num[3][0]=1;
 num[3][1]=2;
 num[4][0]=1;
 num[4][1]=2;

Или

 int[][] num={ {1,2}, {1,2}, {1,2}, {1,2}, {1,2} };

Рваный массив (или непрямоугольный массив)

 int[][] num = new int[5][];
 num[0] = new int[1];
 num[1] = new int[5];
 num[2] = new int[2];
 num[3] = new int[3];

Итак, здесь мы явно определяем столбцы.
Другой путь:

int[][] num={ {1}, {1,2}, {1,2,3,4,5}, {1,2}, {1,2,3} };

Для доступа:

for (int i=0; i<(num.length); i++ ) {
    for (int j=0;j<num[i].length;j++)
        System.out.println(num[i][j]);
}

В качестве альтернативы:

for (int[] a : num) {
  for (int i : a) {
    System.out.println(i);
  }
}

Рваные массивы являются многомерными массивами.
Для объяснения см. Подробности о многомерном массиве в официальных руководствах по Java

121 голосов
/ 29 июля 2009
Type[] variableName = new Type[capacity];

Type[] variableName = {comma-delimited values};



Type variableName[] = new Type[capacity]; 

Type variableName[] = {comma-delimited values};

также допустимо, но я предпочитаю скобки после типа, потому что легче увидеть, что тип переменной на самом деле является массивом.

35 голосов
/ 29 июля 2009

Существуют различные способы объявления массива в Java:

float floatArray[]; // Initialize later
int[] integerArray = new int[10];
String[] array = new String[] {"a", "b"};

Дополнительную информацию можно найти на сайте Sun и на JavaDoc .

.
28 голосов
/ 04 июня 2013

Ниже показано объявление массива, но массив не инициализирован:

 int[] myIntArray = new int[3];

Ниже показано объявление и инициализация массива:

int[] myIntArray = {1,2,3};

Теперь следующее также показывает объявление и инициализацию массива:

int[] myIntArray = new int[]{1,2,3};

Но этот третий показывает свойство создания анонимного массива-объекта, на которое указывает ссылочная переменная "myIntArray", поэтому, если мы напишем просто "new int [] {1,2,3};" тогда это то, как анонимный массив-объект может быть создан.

Если мы просто напишем:

int[] myIntArray;

это не объявление массива, но следующее утверждение завершает вышеуказанное объявление:

myIntArray=new int[3];
27 голосов
/ 29 июля 2009

Я считаю полезным, если вы понимаете каждую часть:

Type[] name = new Type[5];

Type[] - это тип переменной с именем name («имя» называется идентификатор ). Литерал «Тип» является базовым типом, а скобки означают, что это тип массива этой базы. Типы массивов, в свою очередь, являются собственными типами, что позволяет создавать многомерные массивы, такие как Type[][] (тип массива Type []). Ключевое слово new говорит о выделении памяти для нового массива. Число между скобками говорит о том, насколько большим будет новый массив и сколько памяти нужно выделить. Например, если Java знает, что базовый тип Type занимает 32 байта, а вам нужен массив размером 5, ему нужно внутренне выделить 32 * 5 = 160 байтов.

Вы также можете создавать массивы с уже имеющимися значениями, такими как

int[] name = {1, 2, 3, 4, 5};

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

25 голосов
/ 29 июля 2009

С другой стороны,

// Either method works
String arrayName[] = new String[10];
String[] arrayName = new String[10];

Это объявляет массив с именем arrayName размера 10 (у вас есть элементы от 0 до 9 для использования).

24 голосов
/ 29 июля 2009

Также, если вы хотите что-то более динамичное, есть интерфейс List. Это не будет работать так же хорошо, но будет более гибким:

List<String> listOfString = new ArrayList<String>();

listOfString.add("foo");
listOfString.add("bar");

String value = listOfString.get(0);
assertEquals( value, "foo" );
14 голосов
/ 28 января 2016

Существует два основных способа создания массива:

Этот, для пустого массива:

int[] array = new int[n]; // "n" being the number of spaces to allocate in the array

И этот, для инициализированного массива:

int[] array = {1,2,3,4 ...};

Вы также можете создавать многомерные массивы, например:

int[][] array2d = new int[x][y]; // "x" and "y" specify the dimensions
int[][] array2d = { {1,2,3 ...}, {4,5,6 ...} ...};
10 голосов
/ 23 мая 2015

Возьмем, к примеру, примитивный тип int. Есть несколько способов объявить и массив int:

int[] i = new int[capacity];
int[] i = new int[] {value1, value2, value3, etc};
int[] i = {value1, value2, value3, etc};

, где во всех этих случаях вы можете использовать int i[] вместо int[] i.

С отражением вы можете использовать (Type[]) Array.newInstance(Type.class, capacity);

Обратите внимание, что в параметрах метода ... означает variable arguments. По сути, любое количество параметров в порядке. Это проще объяснить с помощью кода:

public static void varargs(int fixed1, String fixed2, int... varargs) {...}
...
varargs(0, "", 100); // fixed1 = 0, fixed2 = "", varargs = {100}
varargs(0, "", 100, 200); // fixed1 = 0, fixed2 = "", varargs = {100, 200};

Внутри метода varargs рассматривается как обычный int[]. Type... может использоваться только в параметрах метода, поэтому int... i = new int[] {} не будет компилироваться.

Обратите внимание, что при передаче int[] методу (или любому другому Type[]) вы не можете использовать третий способ. В операторе int[] i = *{a, b, c, d, etc}* компилятор предполагает, что {...} означает int[]. Но это потому, что вы объявляете переменную. При передаче массива в метод, объявление должно быть либо new Type[capacity], либо new Type[] {...}.

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

С многомерными массивами гораздо сложнее иметь дело. По сути, двумерный массив является массивом массивов. int[][] означает массив int[] с. Ключ заключается в том, что если int[][] объявлено как int[x][y], максимальный индекс равен i[x-1][y-1]. По сути, прямоугольник int[3][5] это:

[0, 0] [1, 0] [2, 0]
[0, 1] [1, 1] [2, 1]
[0, 2] [1, 2] [2, 2]
[0, 3] [1, 3] [2, 3]
[0, 4] [1, 4] [2, 4]
...