Collection Framework

데이터 군을 저장하는 클래스들을 표준화한 설계
컬렉션 Collection :  다수의 데이터. 데이터 그룹
프레임웍 Framework :  표준화된 프로그래밍 방식.





Java.util.Arrays Class

배열을 다루는데 유용한 메서드가 정의되어 있는 클래스.
같은 기능의 메서드가 배열의 타입만 다르게 오버로딩되어 있다.



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};
int[] arr1 = Arrays.copyOfRange(arr, 1, 3);      // [1, 2]



fill()

배열의 모든 요소를 지정된 값으로 채운다.
int[] arr = new int[5];
Arrays.fill(arr, 9);                                       // 9, 9, 9, 9, 9
int[] arr = {1, 3, 2, 4};
for (int i : arr) {
    char[] graph = new char[i];
    Arrays.fill(graph, '*');
    print(new String(graph) + i);
}
/* - 결과 -
     *1
     ***3
     **2
     ****4  
*/



setAll()

배열을 채우는데 사용할 람다식 또는 함수형 인터페이스를 구현한 객체를 매개변수로 받는다.
// EditPlus에서 실행
int[] arr = new int[5];
Arrays.setAll(arr, i -> (int)((Math.random()*5)+1));       // 4, 2, 2, 4, 1



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} };

Log.d("TAG_", Arrays.equals(arr2D, arr2D2) + "");        // false
Log.d("TAG_", Arrays.deepEquals(arr2D, arr2D2) + "");    // true



toString()

배열의 모든 요소를 문자열로 편하게 출력할 수 있다.
1차원 배열에만 사용 가능하다.
다차원 배열에는 deepToStrong()을 사용한다.
int[] arr = {1, 2, 4, 5, 9};
int[][] arr2D = { {1, 1}, {1, 2} };

Log.d("TAG_", Arrays.toString(arr));                     // [1, 2, 4, 5, 9]
Log.d("TAG_", 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