Я не могу понять следующий многомерный код. Кто-то мог разъяснить меня?
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} };
Это совсем не разные вещи. В первом случае просто более явно указано, что вы создаете массив массивов.
Никакой реальной разницы. Просто первый объявляет подмассивы, а второй просто помещает значения, которые являются массивами, в массив
Два фрагмента кода дают идентичные результаты.
Многомерные массивы - это массивы массивов.
myArr [0] [1]
вернет 3 myArr [1] [1]
вернет 2 myArr [2] [0]
вернет 11 Начиная с начала объявления массивов, как описано выше.
Вы можете создать массив, указав:
int [] arr = new int [3]; // (уравнение 1)
Вы можете пойти еще дальше, объявив значения в массиве с помощью:
int [] arr = {0,1,2}; // (уравнение 2)
Если вы знаете свои значения заранее, вам не нужно создавать экземпляр int [].
Теперь к вашему вопросу. Как утверждали другие, между ними нет разницы, за исключением более четкой картины того, что вы делаете. Эквивалент ур. 2 в двумерном массиве:
int [] [] arr = {{0,1,2}, {3,4,5}, {6,7,8}}; // (уравнение 3)
Обратите внимание, что вам не нужно объявлять "new int [] []" перед тем, как вы начнете вводить значения. «{0,1,2}» - это сам массив, как и все остальное в первом «{» и последнем} в уравнении 3.Фактически, после объявления arr вы можете вызвать массив «{0,1,2}» из уравнения 3 с помощью следующего оператора:
arr [0]; // (уравнение 4)
уравнение 4 эквивалентно уравнению 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}}};
Оба этих фрагмента кода приведут к многомерным массивам с эквивалентными значениями.
Второй фрагмент показывает, что явное использование new
не требуется при использовании ярлыка литерала массива для внутренних массивов. Это справедливо и для внешнего массива. Этот код можно упростить до:
int[][] myArr = { {1,3,5,7,9}, {0,2,4,6}, {11,22} };
В Oracle Java Tutorial нет примеров смешивания использования new
для объявления массива с буквальным объявлением массива.
Совершенно то же самое - если вы замените один на другой и скомпилируете, вы получите побайтно идентичные файлы класса
. Попробуй сам!