Путаница в многомерном массиве в Java

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

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

Ответы

Ответ 1

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

Ответ 2

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

Ответ 3

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

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

  • myArr[0][1] вернет 3
  • myArr[1][1] вернет 2
  • myArr[2][0] вернет 11

Ответ 4

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

Ответ 5

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

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

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

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

Ответ 6

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

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

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)

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

arr[0]; //(eq 4)

eq 4 эквивалентен eq 2. Вы можете отключить простой "{" с "новым 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}}};