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?
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.
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:
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 .
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.)
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.
Tags und Links java arrays c# multidimensional-array jagged-arrays