Путаница в многомерном массиве в Java - PullRequest
13 голосов
/ 03 июня 2010

Я не могу понять следующий многомерный код. Может ли кто-нибудь уточнить меня?

int[][] myJaggedArr = new int [][] 
{
              new int[] {1,3,5,7,9},
              new int[] {0,2,4,6},
               new int[] {11,22}
   };

Могу ли я узнать, чем он отличается от следующего кода?

int[][] myArr = new int [][] {
             {1,3,5,7,9},
               {0,2,4,6},
                {11,22} };

Ответы [ 6 ]

7 голосов
/ 03 июня 2010

Это ничем не отличается. Первый просто делает более ясным, что вы создаете массив массивов.

3 голосов
/ 03 июня 2010

Нет реальной разницы. Просто первый объявляет вложенные массивы, а второй просто помещает значения, которые являются массивами, в массив

2 голосов
/ 03 июня 2010

Два куска кода дают идентичные результаты.

Многомерные массивы - это массивы массивов.

  • myArr[0][1] вернется 3
  • myArr[1][1] вернет 2
  • myArr[2][0] вернет 11
0 голосов
/ 03 июня 2010

Начиная с начала объявления массивов, как описано выше.

Вы можете создать массив, указав:

int [] arr = new int[3]; //(eq 1)

Вы можете сделать еще один шаг, объявив значения в массиве с помощью:

int [] arr = {0,1,2}; //(eq 2)

Если вы знаете свои значения заранее, вам не нужно создавать экземпляр int [].

Теперь к вашему вопросу. Как утверждают другие, между ними нет никакой разницы, за исключением более четкой картины того, что вы делаете. Эквивалент уравнения 2 в двумерном массиве:

int [][] arr = {{0,1,2},{3,4,5},{6,7,8}}; //(eq 3)

Обратите внимание, что вам не нужно объявлять "new int [] []" перед тем, как вы начнете вводить значения. «{0,1,2}» - это сам массив, как и все остальное в первом «{» и последнем} »в уравнении 3. Фактически, после объявления arr, вы можете вызвать массив« {0,1 , 2} "из уравнения 3 следующим утверждением:

arr[0]; //(eq 4)

eq 4 эквивалентно eq 2. Вы можете переключить простое "{" с помощью "new int [] {" или "new int [] [] {". Если вы хотите поменять одно на другое, это нормально, и единственная реальная разница - погода или нет, она подходит вашему стилю кодирования.

Для забавы, вот пример трехмерного массива с коротким синтаксисом:

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

int [][][] arr = {{{0,1,2},{3,4,5},{6,7,8}}, {{9,10,11},{12,13,14},{15,16,17}}, {{18,19,20},{21,22,23},{24,25,26}}};

0 голосов
/ 03 июня 2010

Оба этих фрагмента кода приведут к многомерным массивам с эквивалентными значениями.

Второй фрагмент показывает, что явное использование new не требуется при использовании ярлыка-массива для внутренних массивов. Это также верно для внешнего массива. Этот код может быть дополнительно упрощен до:

int[][] myArr = { {1,3,5,7,9}, {0,2,4,6}, {11,22} };

Oracle Java Tutorial не показывает никаких примеров смешивания использования new для объявления массива с объявлением литерального массива.

0 голосов
/ 03 июня 2010

Полностью то же самое - если вы замените один другим и скомпилируете, вы получите байтовые идентичные class файлы.Попробуйте сами!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...