1.Arrays.fill()

배열로 작업할 때 Java 프로그래머는 배열을 동일한 값으로 채워야 하는 경우가 매우 많습니다. 물론 루프를 작성하고 루프에 있는 배열의 각 셀에 값을 할당할 수 있습니다.

int[] x = new int[100];
for (int i = 0; i < x.length; i++)
x[i] = 999;

Arrays.fill()또는 정확히 동일한 작업을 수행하는 메서드를 호출할 수 있습니다 . 전달된 값으로 전달된 배열을 채웁니다. 다음과 같이 표시됩니다.

Arrays.fill(name, value)

그리고 위 예제의 코드는 좀 더 간결하고 명확하게 만들 수 있습니다.

int[] x = new int[100];
Arrays.fill(x, 999);

Arrays.fill()이 메서드를 사용하여 전체 배열이 아니라 배열의 일부를 일부 값으로 채울 수도 있습니다 .

Arrays.fill(name, first, last, value)

여기서 첫 번째와 마지막은 채울 첫 번째 셀과 마지막 셀의 인덱스입니다.

Java의 오래된 전통에 따라 마지막 요소는 범위에 포함되지 않는다는 점을 기억하십시오.

예:

int[] x = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

Arrays.fill(x, 3, 7, 999);


String str = Arrays.toString(x);


x[3], x[4], x[5]x[6]값을 채우고 있습니다 999. 배열의 셀은 0부터 시작하여 번호가 매겨집니다!

변수 str에는 다음 값이 포함됩니다.
"[1, 2, 3, 999, 999, 999, 999, 8, 9, 10]"

Arrays.fill()방법은 1차원 배열에서만 작동합니다. 메서드에 2차원 배열을 전달하면 모든 후속 결과와 함께 1차원으로 처리됩니다.



2.Arrays.copyOf()

이미 알고 있듯이 배열이 생성된 후에는 배열의 크기를 조정할 수 없습니다.

하지만 정말로 원한다면 어떨까요?

글쎄, 당신이 정말로 원한다면 할 수 있습니다!

  • 원하는 길이의 새 배열을 만듭니다.
  • 첫 번째 배열의 모든 요소를 ​​여기에 복사합니다.

그건 그렇고, 이것이 바로 이 Arrays.copyOf()방법이 하는 일입니다. 다음과 같이 호출합니다.

Type[] name2 = Arrays.copyOf(name, length);

이 방법은 기존 배열을 변경하지 않고 대신 새 배열을 만들고 이전 배열의 요소를 복사합니다.

요소가 맞지 않으면( 길이가 기존 배열 의 길이보다 작음 ) 추가 값이 무시됩니다.

새 배열의 길이가 이전 배열의 길이보다 크면 셀이 0으로 채워집니다.

예:

int[] x = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

int[] x2 = Arrays.copyOf(x, 5);
String str2 = Arrays.toString(x2);

int[] x3 = Arrays.copyOf(x, 15);
String str3 = Arrays.toString(x3);


변수 str2에는 다음 값이 포함됩니다.
"[1, 2, 3, 4, 5]"

변수 str3에는 다음 값이 포함됩니다.
"[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0]"

삼.Arrays.copyOfRange()

길이가 10인 배열에서 길이가 5인 배열을 가져오고 싶지만 처음 5개가 아닌 마지막 5개의 요소를 포함해야 하는 경우에는 어떻게 해야 합니까?

이 경우 Arrays클래스의 다른 메서드인 Arrays.copyOfRange(). 호출할 때의 모습은 다음과 같습니다.

Type[] name2 = Arrays.copyOfRange(name, first, last);

이 메서드는 또한 새 배열을 생성하지만 원래 배열의 임의 위치에 있는 요소로 배열을 채웁니다. 여기서 첫 번째와 마지막은 새 배열에 넣어야 하는 첫 번째 요소와 마지막 요소의 인덱스입니다.

Java의 오래된 전통에 따라 마지막 요소는 범위에 포함되지 않는다는 점을 기억하십시오.

예:

int[] x = {11, 12, 13, 14, 15, 16, 17, 18, 19, 20};

int[] x2 = Arrays.copyOfRange(x, 5, 10);
String str2 = Arrays.toString(x2);

int[] x3 = Arrays.copyOfRange(x, 5, 15);
String str3 = Arrays.toString(x3);


변수 str2에는 다음 값이 포함됩니다.
"[16, 17, 18, 19, 20]"

변수 str3에는 다음 값이 포함됩니다.
"[16, 17, 18, 19, 20, 0, 0, 0, 0, 0]"


4.Arrays.sort()

아, 가장 맛있는 대접: 분류 . 배열은 프로그래밍에서 매우 자주 정렬됩니다. 어레이로 작업할 때 가장 일반적인 세 ​​가지 작업은 다음과 같습니다.

  • 배열 정렬
  • 배열의 최소(또는 최대) 요소 찾기
  • 배열에서 요소의 인덱스 결정(배열에서 요소 찾기)

이것이 바로 Java 작성자가 클래스 sort()에 메서드를 포함시킨 이유입니다 Arrays. 다음과 같이 호출합니다.

Arrays.sort(name);

이 메서드는 전달된 배열을 오름차순으로 정렬합니다.

예:

int[] x = {11, -2, 3, 0, 999, -20, 8, -20, 99, -20};

Arrays.sort(x);

String str = Arrays.toString(x);



변수 str에는 다음 값이 포함됩니다.
"[-20, -20, -20, -2, 0, 3, 8, 11, 99, 999]"

훌륭하죠? 하나의 메서드를 호출했고 이제 정렬된 배열을 갖게 되었습니다. 아름다운.

그런데 이 방법을 사용하여 전체 배열뿐만 아니라 일부만 정렬할 수도 있습니다. 다음과 같이 호출합니다.

Arrays.sort(name, first, last);

여기서 firstlast는 정렬이 접촉해야 하는 첫 번째와 마지막 셀의 인덱스입니다.

Java의 오래된 전통에 따라 마지막 요소는 범위에 포함되지 않는다는 점을 기억하십시오.

예:

int[] x = {11, -2, 3, 0, 999, -20, 8, -20, 99, -20};

Arrays.sort(x, 4, 8);
String str = Arrays.toString(x);


변수 str에는 다음 값이 포함됩니다.
"[11, -2, 3, 0, -20, -20, 8, 999, 99, -20]"

배열을 정렬하기 위해 Java는 가장 빠른 정렬 알고리즘인 QuickSort를 사용합니다 . 계산 복잡성은 배열의 크기에 따라 달라지며 N log(N) 공식을 사용하여 계산됩니다.

1000개 요소의 배열을 정렬하려면 약 3,000번의 배열 요소 비교가 필요합니다. 100만 요소의 배열을 정렬하려면 약 600만 번의 비교가 필요합니다.



5.Arrays.binarySearch()

음, 클래스의 가장 흥미로운 마지막 메서드는 Arrays배열에서 주어진 값을 검색할 수 있습니다. 이것은 일반적인 검색이 아닙니다. 사랑받는 이진 검색 입니다 . 요약하면 다음과 같습니다.

  • 먼저 배열이 정렬됩니다.
  • 그런 다음 배열의 중간 요소를 찾고 있는 요소와 비교합니다.
  • 요소가 중간 요소보다 크면 배열의 오른쪽 절반에서 검색이 계속됩니다.
  • 찾고 있는 요소가 중간 요소보다 작으면 배열의 왼쪽 절반에서 검색이 계속됩니다.

배열이 정렬되어 있기 때문에 한 번의 비교로 절반을 제거할 수 있습니다. 그런 다음 다음 단계에서 나머지 절반을 버립니다.

이 접근 방식은 이진 검색을 매우 빠르게 만듭니다. 100만(!) 요소의 배열에서 단 20번의 비교로 원하는 요소의 인덱스를 찾을 수 있습니다. 이 접근 방식의 단점은 배열을 먼저 정렬해야 하고 정렬에도 시간이 걸린다는 것입니다.

다음과 같이 호출합니다.

int index = Arrays.binarySearch(name, value);

여기서 name배열의 이름은 이미 정렬된 상태로 전달되어야 합니다(예: 메서드 사용 Arrays.sort()). 그리고 value배열에서 찾고 있는 요소입니다. 메서드에서 반환된 결과는 원하는 배열 요소의 인덱스 입니다 .

예:

int[] x = {11, -2, 3, 0, 999, -20, 8, -20, 99, -20};
Arrays.sort(x);

int index1 = Arrays.binarySearch(x, 0);
int index2 = Arrays.binarySearch(x, -20);
int index3 = Arrays.binarySearch(x, 99);
int index4 = Arrays.binarySearch(x, 5);
x이다:
{-20, -20, -20, -2, 0, 3, 8, 11, 99, 999}

4
1(인덱스 02허용 가능)
8
-7

배열이 검색 중인 요소의 여러 인스턴스를 포함하는 경우 알고리즘은 단순히 그 중 하나의 인덱스를 반환합니다 . 중복 요소)."

요소가 배열에서 발견되지 않으면 인덱스는 음수가 됩니다.



Arrays6. 클래스 에 대한 Oracle 설명서 링크

Arrays매우 관심이 있는 경우 공식 문서 a href="https://docs.oracle.com/en/java/javase/14/docs/api/java.base에서 클래스 및 해당 메서드 에 대한 모든 내용을 읽을 수 있습니다. /java/util/Arrays.html">오라클 웹 사이트.

Arrays.mismatch()예를 들어 및 메서드 에 대해 읽을 수 있습니다 Arrays.compare(). 어쩌면 당신은 그것들이 어떻게든 유용하다는 것을 알게 될 것입니다.

그리고 방법의 수에 혼동하지 마십시오. 각 방법에는 매개변수 유형만 다른 ​​5-10개의 변형이 있습니다.