Dico

[Java] Class Arrays

  • 민갤

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()

    컬렉션을 스트림으로 변환한다.


Arrays API

참고 서적: 자바의 정석 3판 2