这是在没有使用外部库的情况下用Java打包/取消打包多维原始数组的最有效方法吗?
private Float[][] toFloatArray(float[][] values)
{
Float[][] objArray = new Float[values.length][values[0].length];
for (int i = 0; i < values.length; i++)
{
for (int j = 0; j < values[0].length; j++)
{
objArray[i][j] = values[i][j];
}
}
return objArray;
}
使用外部库最有效率是什么?
答案 0 :(得分:3)
这里没有魔法:这就是apache-commons在你使用他们的库时的表现:
public static short[] toPrimitive(Short[] array) {
if (array == null) {
return null;
} else if (array.length == 0) {
return EMPTY_SHORT_ARRAY;
}
final short[] result = new short[array.length];
for (int i = 0; i < array.length; i++) {
result[i] = array[i].shortValue();
}
return result;
}
答案 1 :(得分:2)
我认为我不这样做。如果阵列不是真正的“矩形”,它将失败。我会做类似的事情:
private Float[][] toFloatArray(float[][] values)
{
Float[][] objArray = new Float[values.length][];
for (int i = 0; i < values.length; i++)
{
objArray[i] = new Float[values[i].length];
for (int j = 0; j < values[i].length; j++)
{
objArray[i][j] = values[i][j];
}
}
return objArray;
}
您可能能够通过删除中间数组访问进行微优化:
private Float[][] toFloatArray(float[][] values)
{
Float[][] objArray = new Float[values.length][];
for (int i = 0; i < values.length; i++)
{
float[] subSource = values[i];
Float[] subDest = new Float[subSource.length];
objArray[i] = subDest;
for (int j = 0; j < subSource.length; j++)
{
subDest[j] = subSource[j];
}
}
return objArray;
}
...但我不会惊讶地发现好的JIT无论如何都可以优化。 (可能不适用于源阵列,当然可能会在幕后改变......)