2011-04-05 37 views
1

这是最有效的方法来在Java中放入/取消多维原始数组而不使用外部库吗?最有效的方法来box/unbox多维原始数组

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

没有想到这一点,但您是否知道使用较少代码的解决方案? – javacavaj 2011-04-05 14:53:35

+0

顺便说一句,你不是(un)装箱数组,但数组元素。 – Ingo 2011-04-05 15:12:44

回答

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可以进行优化。 (可能不是为源阵列,这可能是改变路线的幕后,...)

+0

JVM可以认为源数组不会在幕后更改,因为线程同步明显不足。 – 2013-04-22 18:58:19

2

无幻这里:也就是说,Apache的百科全书是怎么做的,当你使用他们的图书馆:

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; 
} 

source

相关问题