Arrays
배열을 다루기 편리한 메서드(static) 제공
1. 배열의 출력 - toString()
static String toString(byte[ ] a)
2. 배열의 복사 - copyOf(), copyOfRange()
: 새로운 배열을 생성해서 반환
int[ ] arr = {0, 1, 2, 3, 4};
int[ ] arr2 = Arrays.copyOf(arr, arr.length); // arr2 = [0, 1, 2, 3, 4]
int[ ] arr3 = Arrays.copyOf(arr, 7); // arr3 = [0, 1, 2, 3, 4, 0, 0]
int[ ] arr4 = Arrays.copyOfRange(arr, 2, 4); // arr4 = [2, 3]
3. 배열 채우기 - fill(), setAll()
int[ ] arr = new int[5];
Arrays.fill(arr, 9); // arr = [9, 9, 9, 9, 9]
Arrays.setAll(arr, (i) ➔ (int)(Math.random()*5)+1); // arr = [1, 5, 2, 1, 1]
(난수값 1<= x < 6)
4. 배열의 정렬과 검색 - sort(), binarySearch()
binarySearch() : 이진탐색 ➔ 정렬된 배열에만 사용가능
int[ ] arr = {3, 2, 0, 1, 4};
int idx = Arrays.binarySearch(arr, 2); // idx = -5 (잘못된 결과)
Arrays.sort(arr); // 배열 arr 정렬하기
System.out.println(Arrays.toString(arr)); // [0, 1, 2, 3, 4]
int idx = Arrays.binarySearch(arr, 2); // idx = 2 (올바른 결과)
5. 다차원 배열의 출력 - deepToString()
int[ ] arr = {0, 1 ,2, 3, 4};
int[ ][ ] arr2D = {{11, 12}, {21, 22}};
System.out.println(Arrays.toString(arr)); // [0, 1, 2, 3, 4]
System.out.println(Arrays.deepToString(arr2D)); // [[11. 12], [21, 22]]
6. 다차원 배열의 비교 - deepEquals()
String[ ][ ] str2D = new String[ ][ ]{{"aaa", "bbb"}, {"AAA", "BBB"}};
String[ ][ ] str2D2 = new String[ ][ ]{{"aaa", "bbb"}, {"AAA", "BBB"}};
System.out.println(Arrays.deepEquals(str2D, str2D2));
7. 배열을 List로 변환 - asList(Object... a)
(읽기 전용)
List list = Arrays.asList(new Integer[ ]{1, 2, 3, 4, 5}); // list = [1, 2, 3, 4, 5]
List list = Arrays.asList(1, 2, 3, 4, 5); // list = [1, 2, 3, 4, 5]
list.add(6); // UnsupportedOperationException 예외 발생 (읽기 전용이라서 오류)
List list = new ArrayList(Arrays.asList(1, 2, 3, 4, 5)); // 새로운 ArrayList 생성 (변경 가능)
8. 람다와 스트림 관련 - parallelXXX(), spliterator(), stream()
Comparable & Comparator
객체 정렬에 필요한 메서드(정렬기준 제공)를 정의한 인터페이스
- Comparable : 기본 정렬기준을 구현하는데 사용
- Comparator : 기본 정렬기준 외에 다른 기준으로 정렬하고자할 때 사용
public interface Comparable {
int compareTo(Object o); // 주어진 객체(o)를 자신(this)과 비교
}
public interface Comparator {
int compare(Object o1, Object o2); // o1, o2 두 객체를 비교
boolean equals(Object obj); // equals를 오버라이딩하라는 뜻
}
- compare() 와 compareTo()는 두 객체의 비교결과를 반환하도록 작성
같으면 0, 오른쪽 값이 크면 음수(-1), 작으면 양수(+)
public final class Integer extends Number implements Comparable {
...
public int compareTo(Integer anotherInteger) {
int v1 = this.value;
int v2 = anotherInteger.value;
// 같으면 0, 오른쪽 값이 크면 -1, 작으면 1 반환
return (v1 < v2 ? -1 : (v1 == v2 ? 0 : 1));
}
...
}
< 예제 >
String 클래스가 기본적으로 Comparable을 구현하고 있음
Integer와 Comparable
public final class Integer extends Number implements Comparable {
...
public int compareTo(Object o) {
return compareTo((Integer) o);
}
public int compareTo(Integer anotherInteger) {
int thisVal = this.value;
int anotherVal = anotherInteger.value;
// 같으면 0, 오른쪽 값이 크면 -1, 작으면 1 반환
return (thisVal < anotherVal ? -1 : (thisVal == anotherVal ? 0 : 1));
}
...
}
< 버블 정렬 >
다 그대로 두고 정렬 기준만 정하면 됨
'JAVA > 자바의 정석' 카테고리의 다른 글
[자바의 정석 - 기초편] 11. (6) HashMap / Hashtable / Collections 컬렉션 클래스 요약 (0) | 2023.12.13 |
---|---|
[자바의 정석 - 기초편] 11. (5) HashSet / TreeSet (0) | 2023.12.12 |
[자바의 정석 - 기초편] 11. (3) 스택 / 큐 / Iterator / Listlterator / Enumeration / Map (0) | 2023.12.07 |
[자바의 정석 - 기초편] 11. (2) ArrayList / java API 소스 보기 / LinkedList (0) | 2023.12.07 |
[자바의 정석 - 기초편] 11. (1) 컬렉션 프레임웍 ( List / Set / Map ) (0) | 2023.12.07 |