답변:
Java에서 배열의 길이는 변경할 수 없습니다. 따라서 원하는 부분을 새 배열로 복사해야합니다. java.util.Arrays 클래스의 메소드를
사용하십시오 .copyOfRange
int[] newArray = Arrays.copyOfRange(oldArray, startIndex, endIndex);
startIndex 는 복사 할 범위의 초기 색인입니다.
endIndex 는 복사 할 범위의 최종 색인이며 배타적입니다. (이 색인은 배열 외부에있을 수 있습니다)
예 :
//index 0 1 2 3 4
int[] arr = {10, 20, 30, 40, 50};
Arrays.copyOfRange(arr, 0, 2); // returns {10, 20}
Arrays.copyOfRange(arr, 1, 4); // returns {20, 30, 40}
Arrays.copyOfRange(arr, 2, arr.length); // returns {30, 40, 50} (length = 5)
endIndex
. 첫 번째 인수로 전달 된 배열의 크기보다 더 큰 값을 제공 할 수 없습니다 . 따라서 전체 사본을 원할 경우이 배열을 참조하는 변수를 만들고 Arrays.copyOfRange(var, 0, var.length)
또는Arrays.copyOf(var, var.length)
Arrays.copyOfRange(Thread.currentThread().getStackTrace(),1,Short.MAX_VALUE)
ArrayIndexOutOfBoundsException
.
예, Arrays.copyOfRange 를 사용할 수 있습니다
그것은 똑같은 일을합니다 (사본이 있습니다 : 초기 배열을 변경하지 마십시오).
List
와 a 를 사용해야합니다 subList
.
당신은 시도 할 수 있습니다:
System.arraycopy(sourceArray, 0, targetArray, 0, targetArray.length);// copies whole array
// copies elements 1 and 2 from sourceArray to targetArray
System.arraycopy(sourceArray, 1, targetArray, 0, 2);
javadoc for System을 참조하십시오 .
Java 1.6 이상을 사용 Arrays.copyOfRange
하는 경우 배열의 일부를 복사하는 데 사용할 수 있습니다 . javadoc에서 :
지정된 배열의 지정된 범위를 새 배열로 복사합니다. (from) 범위의 초기 색인은 0과 사이에 있어야
original.length
합니다. 의 값original[from]
은from == original.length
또는의 경우가 아니라면 사본의 초기 요소에 배치됩니다from == to
. 원래 배열의 후속 요소 값은 사본의 후속 요소에 배치됩니다.to
보다 크거나 같아야 하는 범위 ( ) 의 최종 색인은 보다 클from
수 있으며original.length
,이 경우false
색인이보다 크거나 같은 사본의 모든 요소에 배치됩니다original.length - from
. 반환 된 배열의 길이는입니다to - from
.
다음은 간단한 예입니다 .
/**
* @Program that Copies the specified range of the specified array into a new
* array.
* CopyofRange8Array.java
* Author:-RoseIndia Team
* Date:-15-May-2008
*/
import java.util.*;
public class CopyofRange8Array {
public static void main(String[] args) {
//creating a short array
Object T[]={"Rose","India","Net","Limited","Rohini"};
// //Copies the specified short array upto specified range,
Object T1[] = Arrays.copyOfRange(T, 1,5);
for (int i = 0; i < T1.length; i++)
//Displaying the Copied short array upto specified range
System.out.println(T1[i]);
}
}
copyOfRange를 확인하십시오 . 예 :
int[] arr2 = Arrays.copyOfRange(arr,0,3);
다음과 같은 것을 사용할 수 있습니다. Arrays#copyOfRange
subList(int fromIndex, int toIndex)
정수 arr에서 다음과 같은 방법을 사용할 수 있습니다 .
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> arr = new ArrayList<>();
arr.add(1);
arr.add(2);
arr.add(3);
arr.add(4);
List<Integer> partialArr = arr.subList(1, 3);
// print the subArr
for (Integer i: partialArr)
System.out.println(i + " ");
}
}
출력은 다음과 같습니다 2 3
..
이 subList(int fromIndex, int toIndex)
방법은 수신하는 두 번째 변수 (var2-1)에서 마이너스 1을 수행합니다. 왜 그런지 정확히 알지 못하지만 그 결과는 어쩌면 배열의 크기를 초과 할 가능성을 줄일 수 있습니다.
Arrays.copyOfRange(Thread.currentThread().getStackTrace(),1,255)
255 대신 Integer.MAX_VALUE를 사용할 수 없습니다. 실제 길이를 원치 않는 경우