в чем разница между этими блоками кода? - PullRequest
5 голосов
/ 08 ноября 2011

Итак, я несколько раз просмотрел этот блок кода в книге, которую читаю:

int[][] someArray = new int[size][];
for(int i=0; i<size; i++)
   someArray[i] = new int[size];

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

int[][] someArray = new int[size][size];

Я что-то здесь пропустил?Есть ли причина, по которой я должен использовать длинный блок кода выше?

Спасибо,

Ответы [ 4 ]

6 голосов
/ 08 ноября 2011

Вы можете создать рваный или неровный массив с первой конструкцией

2 голосов
/ 08 ноября 2011

Как сказал parapura, вы можете создать так называемый рваный массив.По сути, вы можете сделать что-то треугольной формы и тому подобное (может напоминать лестницу или рождественскую елку или все, что вы хотите, чтобы это было).Так что это может быть (используя случайные числа)

1 2 3

1 2

4 4 5 6 2 3 5

4 5 1

2 2 5 2

, где длины подмассивов имеют разные размеры.В вашем примере, хотя они оба имеют одинаковый размер, поэтому оба способа делают одно и то же.

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

1 голос
/ 08 ноября 2011

Если вы сомневаетесь, взгляните на байт-код - особенно для чего-то подобного, это всего лишь несколько строк кода.
Видимо, компилятор имеет специальную конструкцию для создания второй формы.первая форма (без цикла): общедоступная статическая void main (java.lang.String []);Код: 0: iconst_3 1: anewarray # 2;// класс "[I" 4: astore_1 5: return

вторая форма:

0: iconst_3 1: iconst_3 2: multianewarray # 2, 2;// class "[[I" 6: astore_1 7: return

==================

Один способ взглянуть на этов том, что в цикле много потерянного времени, когда вы знаете, что в любом случае у вас будет «квадратный» массив.Представьте, что вы работаете в Google и вам нужен двумерный массив с размером = 10000000.Первая форма будет значительно медленнее.

1 голос
/ 08 ноября 2011

Без разницы here. Первый полезен, когда мы хотим создать массивы разных размеров.

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