2012-07-11 4 views
1

오름차순으로 정렬 된 int 배열을 갖고 있으며 새 번호를 삽입하고 어떤 위치에 삽입할지 알고 있습니다. System.arraycopy를 어떻게 사용할 수 있습니까?요소를 순서 배열에 삽입하는 방법

System.arraycopy(items, i, items, i + 1, items.length+1); 
items[i] = n; 

또는 I가 위치로부터 임시 배열 복사본을 생성 할 것이다 원래 배열

int[] newItems = new int[size + 1]; 
System.arraycopy(items, i, newItems, i + 1, items.length+1); 
items[i] = s; 
size++; 
System.arraycopy(items, 0, newItems, i, i); 
items = newItems; 

답변

0

다시 복사 후 임시 배열에 삽입 (위치 하나 개의 요소를 이동)하고 첫 번째 방법은 효과가 있습니다.

확신이없는 경우 arraycopy arraycopy의 설명서를 참조하십시오. 원본과 대상이 같으면 임시 배열에 복사 한 것처럼 원래 어레이에 다시 복사되므로 제대로 작동 할 것입니다.

0

어떤 생각/관찰

  • 왜 쉽게 테스트 할 수 있습니다 무엇을 물어

    ? 원래 배열에서 다른 항목에 대한 곳이 없기 때문에
  • 첫 번째 방법은 IndexOutOfBounds (다음 실 거예요 작업)
    • 을 던질 수
    • 복사 세그먼트의 길이는 가장 items.length에있을 수 있기 때문에 - 나는 -1 (이 삽입 지점에서 length-i가 될 것이고 마지막 하나를 버리거나 다른 예외를 가져야합니다.
  • 두 번째 방법도 실패합니다. 마지막 위치에 대해 길이를 잘못 생각하는 것 같습니다.
관련 문제