2012-11-04 2 views
0

2 차원 배열이 있는데 첫 번째 행을 같은 크기의 다른 배열에 복사하면됩니다. 이 일을하는 가장 좋은 방법은 무엇입니까? 그건 그냥 내 INT 초기화과 관련이있다 생각 첫 번째 행, 나에게 공의를주고있다 그러나Java 2D 배열 복사본

public static int[][] buildCME(int[][] array){ 

    int [][] arrayCME = new int[array.length][array[0].length]; 


    for(int y = 1; y < array.length; y++) 
    { 

     for (int x = 0; x < 1; x++) 
     { 

      arrayCME[y][x] = array[y][x]; 

     } 
    } 

: 나는 이것을 시도했다. 이 루프를 위해 만든 이유는 전체 2D 배열을 설명하기 위해 일반 for 루프에서 if 문을 만드는 것보다 쉽게 ​​계산할 수 있다고 생각했기 때문입니다. 도와 주셔서 감사합니다!

답변

2

바깥 쪽 루프가 0이 아닌 1에서 시작하고 배열이 0에서 시작하므로 첫 번째 행은 항상 변경되지 않습니다.

+0

그게 바뀌고 싶지는 않지만, arrayCME을 출력 할 때 첫 번째 행은 모두 0입니다. –

+0

@Aaron은 arrayCME의 첫 번째 행이 기본값에서 변경되지 않는다는 것을 의미합니다. 그것은 모두 0입니다. 이것은 당신이 원하는 것이 아닙니다. 바깥 고리가 0에서 시작하도록하십시오. –

+0

아, 그렇습니다. 사과하겠습니다, 아론 감사합니다! –

5

코드는 첫 번째 열 (내부 루프는 x < 1)을 두 번째 행 (외부 루프가 1에서 시작)부터 복사합니다. 그것 때문에

System.arraycopy(array[0],0,arrayCME[0],0,array[0].length); 

System.arraycopy는보다 효율적인 사본을 수행해야합니다 복사 할 경우 첫 번째 행 당신은 System.arraycopy 좀보고 할 수 있습니다,

for (int x = 0; x < array[0].length; x++) 
{ 
     arrayCME[0][x] = array[0][x]; 
} 

보다 효율적으로이 작업을 수행하려면 어떻게 native 방법. 게다가 HotSpot JVM과 같은 일부 JVM은이 메소드를 intrinsic으로 처리합니다. JVM은 일반적으로 intrinsics 메소드 호출을 아키텍처 특정 코드로 대체합니다. arraycopy의 경우 메모리를 직접 복사하는 머신 코드 일 수 있습니다.