본문 바로가기

프로그래밍 공부/Java

Java - Java API 클래스 : Arrays 클래스

Arrays 클래스 설명
java.util java.lang 패키지 다음으로 가장 많이 사용되는 패키지, 반드시 import문 사용
java.util.Arrays 배열을 다루기 위한 다양한 메서드 포함
binarySearch() 전달받은 배열에서 특정 객체의 위치를 이진 검색 알고리즘으로 검색후 위치 리턴
copyOf() 전달받은 배열의 특정 길이만큼을 새로운 배열로 복사후 리턴
copyOfRange() 전달받은 배열의 특정 범위에 해당하는 요소만으로 새로운 배열로 리턴
fill() 전달받은 배열의 모든 요소를 특정 값으로 초기화
sort() 전달받은 배열의 모든 요소를 오름차순으로 정렬

java.util

java.util 패키지는 프로그램을 개발할 때 사용할 수 있는 유용한 유틸리티 클래스가 포함되어 있다. 실제로 java.lang 패키지 다음으로 가장 많이 사용되는 패키지가 java.util 패키지 이다. 하지만 import문을 사용하지 않아도 바로 사용할 수 있는 java.lang 패키지와는 다르게 java.util 패키지는 반드시 import문으로 패키지를 불러오고 나서 사용할 수 있다.

java.util.Arrays

Arrays 클래스에는 배열을 다루기 위한 다양한 메서드가 포함되어 있다. Arrays 클래스의 모든 메서드는 클래스 메서드(Static method)이므로, 객체를 생성하지 않고도 바로 사용 할 수 있다. 이 클래스는 java.util 패키지에 포함되어 있기 때문에 반드시 import문으로 java.util 패키지를 불러오고 나서 사용해야 한다.

binarySearch()

1
2
3
4
5
6
int[] array = new int[1000];
for(int i = 0; i < array.length; i++){
    array[i] = i;
}
 
System.out.println(Arrays.binarySearch(array, 437));
cs

위의 코드의 실행 결과는 437이다.

binarySearch() 메서드는 전달받은 배열의 특정 객체의 위치를 이진 검색 알고리즘을 사용해 검색후, 해당 위치를 반환한다. 이 메서드는 이진 검색 알고리즘을 사용하므로, 매개변수로 전달되는 배열이 sort() 메서드 등을 사용하여 미리 정렬되어 있어야만 제대로 작동한다.

copyOf()

1
2
3
4
5
6
7
8
9
10
11
12
int[] array1 = {12345};
int[] array2 = Arrays.copyOf(array1, 3);    // ①
 
for(int i = 0; i < array2.length; i++){
    System.out.print(array2[i] + " ");
}
 
int[] array3 = Arrays.copyOf(array1, 10);    // ②
 
for(int i = 0; i < array3.length; i++){
    System.out.print(array3[i] + " ");
}
cs

위의 코드의 실행 결과는 1 2 3 그리고 1 2 3 4 5 0 0 0 0 0 이다.

번(2행) 라인에서는 copyOf() 메서드를 이용해 배열 array1의 첫 번째 배열 요소부터 3개의 요소를 복사해 배열 array2에 대입하고 있다. 번(8행) 라인에서는 배열 array1의 길이가 5밖에 안되므로 배열 array3의 나머지 배열 요소에는 int형의 기본값인 0이 채워지게 되는 것이다.

새로운 배열의 길이가 원본 배열보다 길면, 나머지 요소를 배열 요소의 타입에 맞게 다음과 같은 기본 값으로 채워진다.

배열 요소의 타입 기본값
char '\u0000'
byte, short, int 0
long 0L
float 0.0F
double 0.0 또는 0.0D
boolean false
배열, 인스턴스 등 null

copyOfRange()

1
2
3
4
5
6
int[] array1 = {12345};
int[] array2 = Arrays.copyOgRange(array1, 24);
 
for(int i = 0; i < array2.length; i++){
    System.out.print(array2[i] + " ");
}
cs

위의 코드의 실행 결과는 3 4 이다.

copyOfRange() 메서드는 전달받은 배열의 특정 범위에 해당하는 요소만을 새로운 배열로 복사해 반환한다. copyOfRange() 메서드는 첫 번째 매개변수로 복사의 대상이 될 원본 배열을 전달받는다. 두 번째 매개변수로는 원본 배열에서 복사할 시작 인덱스를 전달받고, 세 번째 매개변수로는 복사될 배열 요소의 바로 다음 인덱스를 전달받는다. 즉, 세 번째 매개변수로 전달된 인덱스 바로 전까지의 배열 요소까지만 복사된다. 그리고 원본 배열과 같은 타입의 복사된 새로운 배열을 반환한다.

fill()

1
2
3
4
5
6
int[] array = new int[10];
 
Arrays.fill(array, 7);
for(int i = 0; i < array.length; i++){
    System.out.print(array[i] + " ");
}
cs

위의 코드의 실행 결과는 7 7 7 7 7 7 7 7 7 7 이다.

fill() 메서드는 전달받은 배여르이 모든 요소를 특정 값으로 초기화한다. fill() 메서드는 첫 번째 매개변수로 초기화할 배열을 전달받고, 두 번째 매개변수로 초기값을 전달받는다. 따라서 이 메서드는 전달받은 원본 배열의 값을 변경하게 된다.

sort()

1
2
3
4
5
6
int[] array = {53412};
 
Arrays.sort(array);
for(int i = 0; i < array.length; i++){
    System.out.print(array[i] + " ");
}
cs

위의 코드의 실행 결과는 1 2 3 4 5 이다.

sort() 메서드는 전달받은 배열의 모든 요소를 오름차순으로 정렬한다. sort() 메서드는 매개변수로 정렬할 배열을 전달받는다, 따라서 이 메서드는 전달받은 원본 배열의 순서를 변경하게 된다.

그 외 Arrays 메서드

메서드명 설명
static<T>List<T>asList(T...a) 전달받은 배열을 고정 크기의 리스트(list)로 변환하여 리턴
static int binarySearch(Object[] a, Object key) 전달받은 배열에서 특정 객체를 이진 검색 알고리즘을 사용해 검색한 후, 그 위치를 리턴
static<T>T[]copyOf(T[] original, int newLength) 전달 받은 배열을 특정 길이의 새로운 배열로 복사해 리턴
static<T>T[]copyOfRange(T[] original, int from, int to) 전달받은 배열의 특정 범위에 해당하는 요소만을 새로운 배열로 복사해 리턴
static boolean equals(Object[] a, Object[] a2) 전달받은 두 배열이 같은지를 확인
static void fill(Object[] a, Object val) 전달받은 배열의 모든 요소를 특정 값으로 초기화
static void sort(Object[] a) 전달받은 배열의 모든 요소를 오름차순으로 정렬
 

'프로그래밍 공부 > Java' 카테고리의 다른 글

Java - 예외 처리  (0) 2020.02.24
Java - 제네릭(Generic)  (0) 2020.02.24
Java - Java API 클래스 : String 클래스  (0) 2020.02.21
Java - Java API 클래스 : Object 클래스  (0) 2020.02.21
Java - Java의 다형성 예제  (0) 2020.02.21