2017-04-18 56 views
6

Zauważyłem, że inicjowanie tablicy 2D jak tenDlaczego java trwa długo inicjalizując dwuwymiarowe tablice zaczynając od pierwszego wymiaru o dużej wielkości?

przypadku 1: -

int ar [] [] = new int [10000001][10] ; 

zabiera więcej czasu, niż inicjalizacji jak ten

przypadku 2: -

int ar[] [] = new int [10] [10000001] ; 

w Przypadek 1 to czas około 4000ms, ale w przypadku 2 nie przekracza 100ms , dlaczego jest tak duża luka?

+0

Jak to zmierzyłeś? – RealSkeptic

+3

Pomyśl, ile obiektów/tablic należy utworzyć w obu przypadkach. Podpowiedź: różnica jest ogromna. – Thomas

Odpowiedz

10

Ściśle mówiąc, Java nie ma tablic 2D: zamiast tego używa tablic 1D ułożonych w tablice 1D tablic.

W pierwszym przypadku, oprócz pojedynczej tablicy tablic, Java tworzy 10000001 tablic składających się z 10 elementów, podczas gdy w drugim tworzy 10 tablic 10000001 elementów.

Ponieważ liczba obiektów różni się o jeden milion, pierwszy przypadek jest znacznie wolniejszy.