Я не знаю, имеет ли это смысл в вашем приложении/контексте, но по соображениям производительности вы обычно должны иметь когерентных данных как можно ближе к памяти.
Для массивов (double[row][column]
) это означает, что данные, имеющие то же значение row
, обычно хранятся очень близко в памяти. Например, когда у вас есть массив, как double[][] d = double[10][10]
и сохраните два значения, например d[0][0] = 1.0; d[1][0] = 2.0;
, тогда они (я думаю) 40 байтов вдали друг от друга.
Но когда вы сохраняете их как d[0][0] = 1.0; d[0][1] = 2.0;
, они непосредственно рядом друг с другом в памяти и обычно загружаются в супербыстрый кеш в то же время. Если вы хотите использовать их итеративно, то это огромный прирост производительности.
Так что для вашего приложения, первое улучшение было бы это:
public double[][] getResult(double[] data, int rowSize) {
int columnSize = data.length;
double[][] result = new double[rowSize][columnSize];
for (int i = 0; i < columnSize; i++) {
result[0][i] = data[i];
}
return result;
}
Во-вторых, вы должны рассмотреть вопрос о целесообразности вы собираетесь повторно использовать data
-Array или нет. Потому что, если вы не повторно использовать его, вы можете просто установить ссылку первой строки в вашем result
массиве к data
-Array так:
result[0] = data;
Опять же, это дает вам еще огромный прирост производительности.
Почему? Ну просто потому, что вам не нужно использовать ненужную много памяти, копируя все значения - и, как вы знаете, распределение памяти может быть довольно медленным.
Так что всегда используйте память вместо того, чтобы ее копировать.
Так мое полное предложение пойти с этим кодом:
public double[][] getResult(double[] data, int rowSize) {
double[][] result = new double[rowSize][];
result[0] = data;
return result;
}
Это не является обязательным ли установить вас на columnSize
или нет.
, который отлично выглядит для меня – SomeDude
Я не понимаю, вы хотите преобразовать массив 1d в массив 2d с определенным размером строки? Что делать, если длина массива не делится на размер строки? Например, у вас есть 1d массив длиной 16. Вы даете размер строки 7. Элементы 0-6 идут в первой строке, 7-13 во второй, 14-15 идут в третьей, и у вас есть 5 "пустых "ячеек. – user1803551
, если код работает, вы должны опубликовать его в нашем члене стека [codereview] (codereview.stackexchange.com/questions) – davejal