[java] Java의 다른 배열에서 하위 배열을 만드는 방법은 무엇입니까?

다른 배열에서 하위 배열을 만드는 방법은 무엇입니까? 첫 번째 배열에서 색인을 가져 오는 메소드가 있습니까?

methodName(object array, int start, int end)

나는 루프를 만들고 프로그램을 고통스럽게 만들고 싶지 않습니다.

계속 오류가 발생합니다.

기호 메소드를 찾을 수 없습니다. copyOfRange (int [], int, int)

이것은 내 코드입니다.

import java.util.*;

public class testing
{
    public static void main(String [] arg)
    {
        int[] src = new int[] {1, 2, 3, 4, 5};
        int b1[] = Arrays.copyOfRange(src, 0, 2);
    }
}



답변

당신이 사용할 수있는

JDK> 1.5

Arrays.copyOfRange(Object[] src, int from, int to)

자바 독

JDK <= 1.5

System.arraycopy(Object[] src, int srcStartIndex, Object[] dest, int dstStartIndex, int lengthOfCopiedIndices); 

자바 독


답변

Arrays.copyOfRange(..)Java 1.6에 추가되었습니다. 아마도 최신 버전이 없을 것입니다. 업그레이드가 불가능한 경우System.arraycopy(..)


답변

java.util.Arrays 클래스의 copyOfRange 메소드를 사용하십시오.

int[] newArray = Arrays.copyOfRange(oldArray, startIndex, endIndex);

상세 사항은:

비슷한 질문에 링크


답변

예, System.arraycopy (Object, int, Object, int, int)라고 합니다.

REP STOSWJIT (루프가 CPU 내부에 있음) 와 같은 것으로 최적화되지 않는 한 여전히 루프를 어딘가에서 수행 할 것 입니다.

int[] src = new int[] {1, 2, 3, 4, 5};
int[] dst = new int[3];

System.arraycopy(src, 1, dst, 0, 3); // Copies 2, 3, 4 into dst


답변

이 링크 에서 다운로드 가능한 Apache ArrayUtils를 사용하면 메소드를 쉽게 사용할 수 있습니다.

subarray(boolean[] array, int startIndexInclusive, int endIndexExclusive) 

“boolean”은 예일 뿐이며 모든 기본 요소 Java 유형에 대한 메소드가 있습니다.


답변

JDK> = 1.8

위의 모든 답변에 동의합니다. Java 8 Streams에는 좋은 방법이 있습니다.

int[] subArr = IntStream.range(startInclusive, endExclusive)
                        .map(i -> src[i])
                        .toArray();

이것에 대한 이점은 많은 다른 유형의 “src”배열에 유용 할 수 있으며 스트림에서 파이프 라인 작업을 작성하는 데 도움이됩니다.

이 질문에 대해서는 특별히 중요하지 않지만 소스 배열이 double[]average() 하위 배열 을 취하고 자 하는 경우 :

double avg = IntStream.range(startInclusive, endExclusive)
                    .mapToDouble(index -> src[index])
                    .average()
                    .getAsDouble();


답변

int newArrayLength = 30;

int[] newArray = new int[newArrayLength];

System.arrayCopy(oldArray, 0, newArray, 0, newArray.length);