2011-04-05 50 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

相關問題