Java

Arrays 클래스

H-jinny 2024. 7. 5. 00:32

java.util.Arrays

코딩 테스트를 준비하면서 여러 함수를 쓰기 시작했는데, 수박 겉 핥기처럼 정확히 이해하지 못한 채로 사용한 것 같았다.

그 중 하나로 정렬에 사용한 Arrays 클래스에 대해 정리해보려고 한다.

 

java.util.Arrays 클래스는 배열을 다루기 위한 메소드들을 포함한다. 이 때 Arrays 클래스의 모든 메소드는 클래스 메소드(static method) 이기 때문에 객체를 생성하지 않고도 바로 사용이 가능하다.

* static method

 

 

sort()

전달받은배열의 모든 요소를 오름차순 정렬하는 메소드이다. 매개변수로 배열을 받고, 전달받은 원본 배열의 순서를 변경한다. 이 때 dual-pivot Quicksort 알고리즘을 사용한다. 다음과 같이 사용할 수 있다.

* 정렬 알고리즘

int[] num = {5, 3, 4, 1, 2};

Arrays.sort(num);

for (int i = 0; i < 5; i++) {
	System.out.print(arr[i] + " ");  // 1 2 3 4 5
}

 

 

 

binarySearch()

전달받은 배열에서 특정 객체의 위치를 이진 검색 알고리즘을 사용하여 검색한 후, 해당 위치를 반환하는 메소드이다. 이진 검색 알고리즘을 사용하므로 전달되는 배열이 미리 정렬되어 있어야 한다.

int[] arr = new int[1000];
for (int i = 0; i < 500; i++) {
	arr[i] = i * 2;
}

System.out.println(Arrays.binarySearch(arr, 100));  // 50

 

 

 

copyOf()

전달받은 배열의 특정 길이만큼 새 배열로 복사하여 반환한다. 첫 번째 매개변수로 원본 배열을, 두 번째 매개변수로 새로운 배열로 복사할 요소의 개수를 받는다. 원본 배열과 같은 타입으로 복사되며, 새로운 배열의 길이가 원본 배열보다 길면 나머지 요소는 배열 요소의 타입에 맞는 기본값으로 채워진다.

int[] arr1 = {1, 2, 3, 4, 5};

int[] arr2 = Arrays.copyOf(arr1, 3);
for (int i = 0; i < arr2.length; i++) {
	System.out.print(arr2[i] + " ");  // 1 2 3
}
System.out.println();

int[] arr3 = Arrays.copyOf(arr1, 10);
for (int i = 0; i < arr3.length; i++) {
	System.out.print(arr3[i] + " ");  // 1 2 3 4 5 0 0 0 0 0
}

 

 

 

copyOfRange()

전달받은 배열의 특정 범위에 해당하는 요소만을 새 배열로 복사하여 반환한다. 첫 번째 매개변수로 원본 배열을, 두 번째 매개변수로 원본 배열에서 복사를 시작할 인덱스를, 세 번째 매개변수로 마지막으로 복사될 요소의 다음 인덱스를 받는다. 마찬가지로 같은 타입으로 복사된다.

int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = Arrays.copyOfRange(arr1, 2, 4);
for (int i = 0; i < arr2.length; i++) {
	System.out.print(arr2[i] + " ");  // 3 4
}

 

 

 

fill()

전달받은 배열의 모든 요소를 특정 값으로 초기화한다. 첫 번째 매개변수로 초기화할 배열을, 두 번째 매개변수로 초기값을  받는다. 이 메소드는 원본 배열의 값을 변경한다.

int[] arr = new int[5];
Arrays.fill(arr, 3);
for (int i = 0; i < arr.length; i++) {
	System.out.print(arr[i] + " ");  // 3 3 3 3 3
}

 

 

 

기타

이 외에도

statc <T> List<T> asList(T... a)  메소드는 전달받은 배열을 고정 크기의 리스트(list)로 변환하여 반환한다.

static boolean equals(Object[] a, Object[] a2)  메소드는 전달받은 두 배열이 같은지 확인한다.

등의 메소드도 존재한다.

 

참고

https://www.tcpschool.com/java/java_api_arrays

 

 

 

오타, 지적 감사합니다 :)