/ / Czy istnieją jakieś ważne różnice między tymi dwoma sposobami pisania tablic? - java, tablice

Czy są jakieś istotne różnice między tymi dwoma sposobami pisania tablic? - Java, tablice

Jest to pytanie koncepcyjne wynikające z pytania (tutaj) Niedawno dostałem odpowiedź na. Użyję przykładu z języka Java, aby zademonstrować moje pytanie, ale myślę, że powinno to dotyczyć innych podobnych języków (nie mogłem powiedzieć na pewno - na szczęście ktoś może to potwierdzić lub powiedzieć inaczej). Zasadniczo zastanawiam się, czy istnieje jakaś subtelna różnica między możliwymi zastosowaniami do następujących (biorąc pod uwagę sposób ich inicjalizacji):

double[] array1D = new double[max]

i

double[][] array2D = new double [max][1]

Zakładając, że inicjalizujemy drugitablica ma tylko jedną kolumnę, czy naprawdę istnieje potrzeba istnienia tablicy 1D? Czy ma jakąkolwiek jakość, której nie ma tablica 2D, czy może po prostu mylić biedne dusze, takie jak ja? Ponadto chciałbym wiedzieć, czy array2D tylko jedna kolumna może zrobić wszystko array1Dnie może?

Odpowiedzi:

2 dla odpowiedzi № 1

Główną różnicą między tablicą 1D i tablicą 2D jest to, że w tym ostatnim rzędy (lub kolumny, jakkolwiek na to spojrzeć) to pojedyncze obiekty, których można używać niezależnie od całej tablicy.

Na przykład możesz przekazać cały wiersz dofunkcja, a funkcja może modyfikować wiersz. Aby osiągnąć to samo z tablicą 1D, musisz przekazać oryginalną tablicę, indeks początkowy wiersza w tablicy i długość wiersza.

Każde odwołanie do obiektu kosztuje 4 bajty, więc użycie pamięci wzrasta o 4 bajty na każdy element, więc marnowanie pamięci jest używanie tablicy 2D do czegoś, co może zrobić tablica 1D.


1 dla odpowiedzi nr 2

nowe podwójne [maks.] tworzy tablicę podwójnych (inicjowanych z 0.0) o długości = max

new double [max] [1] tworzy tablicę wskaźników, z których każdy wskazuje na podwójną tablicę z jednym elementem = 0,0


1 dla odpowiedzi nr 3
int A[2][3]={{1,2,3},{4,5,6}};

Tablica 2D jest przechowywana w pamięci w następujący sposób. Wpisy w wiersz 0 jest zapisywany jako pierwszy, następnie wiersz 1 i tak dalej.

wprowadź opis obrazu tutaj

Tablice 2-D są reprezentowane jako ciągły blokz n bloków każdy o rozmiarze m (tj. może przytrzymaj m liczb całkowitych (lub dowolnego typu danych) w każdym bloku). The wpisy są przechowywane w pamięci, jak pokazano powyżej. Tutaj n oznacza liczbę wierszy, a m oznacza Liczba kolumn.

W języku Java:

Podobnie jak w przypadku wszystkich tablic, nowe słowo kluczowe musi być użyte do przydzielenia pamięci dla tablicy. Na przykład,

 int[][] a = new int[2][4];

Ta dwuwymiarowa tablica będzie miała dwa rzędy icztery kolumny. To faktycznie przydziela 3 obiekty: jednowymiarową tablicę 2 elementów do przechowywania każdej z rzeczywistych tablic wierszy oraz dwie jednowymiarowe tablice z 4 elementami do reprezentowania zawartości wierszy.

 +-----+    +-----+-----+-----+-----+
|a[0] | -> | [0] | [1] | [2] | [3] |
|     |    +-----+-----+-----+-----+    In Java two-dimensional arrays are implemented is a
one-dimensional array of one-dimensional arrays -- like this.
+-----+
|     |    +-----+-----+-----+-----+
|a[1] | -> | [0] | [1] | [2] | [3] |
+-----+    +-----+-----+-----+-----+

W Twoim przypadku:

double[][] array2D = new double [max][1]

To faktycznie przydziela maksymalnie + 1 obiekty: jednowymiarowa tablica maks. elementów do przechowywania każdej z rzeczywistych tablic wierszy oraz maks. jednowymiarowa tablica 1 elementów do reprezentacji zawartości wierszy.

Daj mi znać, jeśli będę się martwić.


0 dla odpowiedzi nr 4

Oba zrobią to samo. Co więcej, nie musisz tworzyć 2-wymiarowej tablicy, gdy wszystko, czego potrzebujesz to tylko jeden wiersz. 2-wymiarowa tablica jest używana, gdy potrzebujesz pracować z wieloma 1-wymiarowymi tablicami.

Myślę też, że musisz zainicjować swój 2-wymiarowy w ten sposób, aby osiągnąć go dla tablicy 1-d

double[][] array2D = new double[1][max]

0 dla odpowiedzi № 5

Wyobraź sobie, że to tablica 1D

1 2 3 4 5 6 7 8 9

i to jest tablica 2D

1
2
3
4
5
6
7
8
9
1 2 3 4 5 6 7 8 9

w zasadzie tablica 2D może przechowywać więcej danych niż tablica 1D i bardziej złożona niż tablica 1D


0 dla odpowiedzi № 6

Wydaje się, że masz błędne przekonanie, że macierze mają dwa wymiary. To nie jest prawda.

W językach programowania tablice jednowymiarowe są normą, a dwuwymiarowe i wyższe są raczej rzadkie (nie pamiętam, kiedy ostatni raz użyłem jednego w Javie).

Użycie tablicy dwuwymiarowej zamiast jednowymiarowej byłoby możliwe, ale zaciemniłoby to znaczenie tablicy i utrudniło dostęp do elementów tablicy.