Collection Framework
데이터 군을 저장하는 클래스들을 표준화한 설계
컬렉션 Collection : 다수의 데이터. 데이터 그룹
프레임웍 Framework : 표준화된 프로그래밍 방식.
Class Arrays
배열을 다루는데 유용한 메서드가 정의되어 있는 클래스.
같은 기능의 메서드가 배열의 타입만 다르게 오버로딩되어 있다.
copyOf()
배열 전체 복사
int[] arr = { 0, 1, 2, 3, 4 };
int[] arr1 = Arrays.copyOf(arr, arr.length); // [0, 1, 2, 3, 4]
int[] arr2 = Arrays.copyOf(arr, 3); // [0, 1, 2]
copyOfRange()
배열의 일부를 복사해서 새로운 배열을 만들어 반환한다.
지정된 범위의 끝은 포함되지 않는다.
int[] arr = { 0, 1, 2, 3, 4 };
System.out.println(arr); // [I@15db9742
arr = Arrays.copyOfRange(arr, 1, 3); // [1, 2]
System.out.println(arr); // [I@6d06d69c
fill()
배열의 모든 요소를 지정된 값으로 채운다.
int[] arr = new int[5];
Arrays.fill(arr, 9);
System.out.println(Arrays.toString(arr)); // 9, 9, 9, 9, 9
int[] arr = { 1, 3, 2, 4 };
for (int i : arr) {
char[] graph = new char[i];
Arrays.fill(graph, '*');
System.out.println(new String(graph) + i);
}
*1
***3
**2
****4
setAll()
배열을 채우는데 사용할 람다식 또는 함수형 인터페이스를 구현한 객체를 매개변수로 받는다.
int[] arr = new int[5];
Arrays.setAll(arr, i -> (int) ((Math.random() * 5) + 1)); // [5, 3, 1, 1, 3]
sort()
배열을 정렬한다.
int[] arr = { 1, 5, 9, 2, 4 };
Arrays.sort(arr); // [1, 2, 4, 5, 9]
binarySearch()
배열에 저장된 요소를 검색하여 그 위치를 반환한다.
배열이 정렬된 상태에 사용해야 올바른 결과를 얻을 수 있다.
검색하는 값과 일치하는 요소가 여러 개일 경우 어떤 것의 위치가 반환될지 알 수 없다.
int[] arr = { 1, 5, 9, 2, 4 };
int index = Arrays.binarySearch(arr, 9); // 2
Arrays.sort(arr); // [1, 2, 4, 5, 9]
index = Arrays.binarySearch(arr, 9); // 4
equals()
두 배열에 저장된 모든 요소를 비교하여 같으면 true를 반환한다.
1차원 배열에만 사용 가능하다.
다차원 배열의 비교는 deepEquals()를 사용한다.
int[][] arr2D = { { 1, 1 }, { 1, 2 } };
int[][] arr2D2 = { { 1, 1 }, { 1, 2 } };
System.out.println(Arrays.equals(arr2D, arr2D2) + ""); // false
System.out.println(Arrays.deepEquals(arr2D, arr2D2) + ""); // true
toString()
배열의 모든 요소를 문자열로 편하게 출력할 수 있다.
1차원 배열에만 사용 가능하다.
다차원 배열에는 deepToStrong()을 사용한다.
int[] arr = { 1, 2, 4, 5, 9 };
int[][] arr2D = { { 1, 1 }, { 1, 2 } };
System.out.println(Arrays.toString(arr)); // [1, 2, 4, 5, 9]
System.out.println(Arrays.deepToString(arr2D)); // [[1, 1], [1, 2]]
asList(T... a)
배열을 List에 담아서 반환한다.
반환된 List는 크기를 변경할 수 없다. → 추가/삭제 불가능.
저장된 내용은 변경 가능하다.
List list = Arrays.asList(new Integer[] { 1, 3, 5, 7, 9 }); // [1, 3, 5, 7, 9]
// == List<Integer> list = Arrays.asList(1, 3, 5, 7, 9);
크기를 변경할 수 있는 List가 필요한 경우 다음과 같이 한다.
List<Integer> copy = new ArrayList<>(list);
// == List<Integer> copy = new ArrayList<>(Arrays.asList(1, 3, 5, 7, 9));
람다와 스트림과 관련된 메서드
- parallelXXX()
parallel로 시작하는 이름의 메서드들.
여러 쓰레드가 작업을 나누어 처리하도록 하여 보다 빠른 결과를 얻을 수 있다.
- spliterator()
하나의 작업을 여러 쓰레드가 처리할 수 있게 여러 작업으로 나누는 Spliterator를 반환한다.
- stream()
컬렉션을 스트림으로 변환한다.
참고 서적: 자바의 정석 3판 2