Arrays
- 배열을 다루기에 편리한 메소드들(static)을 제공한다.
Arrays 클래스의 메소드
- toString()
배열을 출력한다. boolean[], byte[], char[] 등 여러 자료형들에 대한 출력을 폭넓게 지원한다.
- deepToString(), equals(), deepEquals()
다차원 배열에서 비교와 출력을 할 때 쓰인다. deepToString과 deepEquals는 다차원배열에서 각각 출력과 비교를 담당하며 equals는 1차원 배열에서의 비교를 수행한다.
- copyOf(), copyOfRange()
배열을 복사할 때 쓰인다. copyOf는 처음부터 지정된 곳까지 저장을 하며 copyOfRange는 지정된 곳부터 지정된 곳까지 저장을 한다. 만일 기존 배열의 크기를 넘어서는 인덱스까지 저장하도록 명령을 할 경우 넘어서는 범위의 값은 해당 자료형의 기본값이 저장된다.
이들 메소드는 복사만 하는 것이 아니라 추가적으로 생성을 해주는 기능이 있어 System.arrayCopy()메소드보다 더 유용한 편이다.
- fill(), setAll()
배열을 채우고자 할 때 쓰인다. 가령 fill(arr, 5)라고 한다면 arr배열에 모든 요소를 5로 채우게 된다. 이 때 기존에 저장되어있던 데이터들은 덮어씌워진다.
setAll메소드는 배열을 람다식을 이용하여 채우게 된다.
ex) Arrays.setAll(arr, () -> (int)(Math.Random() * 5) + 1) : arr배열을 1부터 5까지의 무작위 수로 채워라
- asList(Object... a)
배열을 List(컬렉션)으로 변환할 때 쓰인다. 이 때 주의할 점은 반환되는 List가 읽기 전용이라는 것이다. 변경을 원한다면 새로운 List를 생성하여야 한다.
- sort(), binarySearch()
각각 배열의 정렬과 검색 역할을 수행한다. 단, binarySearch메소드는 정렬된 배열의 요소만 검색하기 때문에 이 메소드를 사용하기 전에 sort등을 이용하여 배열을 우선 정렬해주어야 한다.
* 이진 검색, 순차 검색
- 순차 검색
처음부터 순서대로 검색한다.
- 이진 검색(이분 검색, binary search)
범위를 절반으로 계속 나누며 검색을 한다. 이진 검색을 사용하기 위해서는 사용 전 정렬을 필수적으로 수행해야 한다.
검색할 배열의 크기가 커질 수록 점점 순차검색보다 효율이 늘어난다.
Comparator와 Comparable
- 정렬을 하고자 할 때 배열은 Arrays.sort()메소드를, 컬렉션은 Collections.sort()메소드를 이용하여 정렬하면 된다.
- 객체를 정렬할때는 sort만으로는 부족하며 정렬에 대한 기준까지 지정해야 완벽하게 정렬이 가능해진다.
- Comparator와 Comparable 인터페이스는 객체를 정렬하는데 필요한 메소드를 정의하여 정렬 기준을 제공해준다.
- Comparable은 기존 정렬 기준을 구현할 때 사용된다.
- Comparator은 정렬 기준 외 다른 기준을 통해 정렬하고자할 때 사용된다.
* 정렬
- 두 값을 비교하여 자리 바꿈을 반복하는 것
- 버블정렬, 선택정렬, 삽입정렬, 퀵정렬, 쉘정렬 등이 있다.
버블정렬 예)
static void sort(Object[] objArr) {
for (int i = 0; i < objArr.length - 1; i++) {
for (int j = 0; j < objArr.length - 1; j++) {
Comparable c = (Comparable)objArr[j];
Comparable c2 = (Comparable)objArr[j + 1];
if (c.compareTo(c2) > 0) {
Object temp = objArr[j];
objArr[j] = objArr[j + 1];
objArr[j + 1] = temp;
}
}
}
}
'프로그래밍 > Java' 카테고리의 다른 글
Properties와 Collections에 대해 (0) | 2019.05.02 |
---|---|
HashMap과 TreeMap에 대해 (0) | 2019.04.25 |
Iterator와 Enumeration, ListIterator에 대해 (0) | 2019.04.25 |
Stack과 Queue에 대해 (0) | 2019.04.22 |
Collection framework에 대해 (3) (0) | 2019.04.21 |