2011-04-05 2 views
1

외부 라이브러리를 사용하지 않고도 자바로 box/unbox 다차원 프리미티브 배열에 가장 효율적인 방법입니까?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

+0

글을 참고하세요 : 글쎄, 당신은 (복싱) 권투 아니지만 배열 요소. – Ingo

답변

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은 스레드 동기화가 확실하지 않기 때문에 소스 배열이 장면 뒤에서 변경되지 않는다고 가정 할 수 있습니다. –

2

여기에 마법 없습니다 :

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

관련 문제