Mehrdimensionale Arrays in Java und C #

8

In C # gibt es zwei Möglichkeiten, um mehrdimensionale Arrays zu erstellen.

%Vor%

Ich weiß, dass die erste Methode intern ein eindimensionales Array erstellt und dass die zweite Methode ein Array von Arrays erstellt (langsamer Zugriff).

Allerdings gibt es in Java kein [,] und ich sehe mehrdimensionale Arrays wie folgt:

%Vor%

Da eine solche Syntax in C # nicht erlaubt ist und Java keine int[,] hat, frage ich mich, ob das mit array1 übereinstimmt? Oder ist es immer noch ein Array von Arrays?

    
Hannesh 15.03.2011, 15:16
quelle

6 Antworten

6

Sie sind falsch; gezackte (verschachtelte) Arrays sind schneller. (Die CLR ist für sie optimiert)

Java unterstützt keine echten mehrdimensionalen Arrays; das ist ein gezacktes Array.
Die Java-Syntax erstellt automatisch alle inneren Arrays. in C #, das würde eine separate Schleife benötigen.

    
SLaks 15.03.2011, 15:19
quelle
7

Da sich die Leute Sorgen über die Leistung von Multi-Dimension vs gestaffelte Arrays in .NET machten, implementierte ich ein paar Tests und benchmarkierte die Ergebnisse auf 8k x 8k Elementen:

Die Tests waren:

  1. Mehrdimensionales 2D-Array
  2. Mehrdimensional mit Indizes rückwärts (y first)
  3. Mehrdimensional mit GetLength (x) anstelle der Ganzzahl
  4. Gestaffelt mit Rückwärtsindizes
  5. Gestaffelt
  6. Eindimensional (Größe x Größe) mit Multiplikation im Index
  7. Eindimensional mit Inkrementindex

Und die Ergebnisse:

%Vor%

Aus Spaß habe ich sie auch auf dem WP7 Emulator laufen lassen und ähnliche Nummern bekommen.

Code der Testfunktion ist hier .

    
nullspace 01.04.2011 05:02
quelle
5

Es ist immer noch ein Array von Arrays. Es ist nur so, dass Sie in C # jedes Unterfeld in einer Schleife erstellen müssen. Also dieses Java:

%Vor%

entspricht dieser C #:

%Vor%

(Wie Slaks sagt, sind gezackte Arrays in .NET im Allgemeinen schneller als rechteckige Arrays. Sie sind jedoch in Bezug auf Speicher weniger effizient.)

    
Jon Skeet 15.03.2011 15:20
quelle
3

In Java deklarieren Sie ein Array von Arrays.

Sie können dies anhand des folgenden Codes sehen:

%Vor%

int[][] arr = new int[3][3]; ist nur eine Abkürzung für:

%Vor%     
jjnguy 15.03.2011 15:20
quelle
1

Ich habe Java-Code in C # übersetzt - so habe ich das gezackte Array gemacht

%Vor%     
Bixel 04.12.2012 09:34
quelle
0

Es ist ein Array von Arrays mit denselben Leistungseinbußen wie in C #. Wenn Sie wissen, dass Ihr Array von Arrays nicht gezackt sein wird, können Sie es in eine Klasse einfügen, um eine 2-d-Indizierung für ein 1-d-Backing-Array zu erhalten.

    
Mike Samuel 15.03.2011 15:21
quelle