[Java] Arrays

이상현·2023년 10월 21일
0

Java

목록 보기
10/21
post-thumbnail

본 게시글은 Java Api Document - Java Class Arrays (JDK 17)
자바의 정석 의 내용을 옮겨 작성됐습니다.

Arrays 클래스

Arrays는 자바의 Collection Framework로, 배열을 다루는데 유용한 메소드들이 모여있는 클래스이다.

모든 메소드가 static 으로 선언되어있어 클래스 생성 없이 바로 사용이 가능하다.

주요 기능

배열 복사

  • copyOf(원본배열, int newLength)
    배열 전체를 복사하여 반환한다.
  • copyOfRange(원본배열, int from, int to)
    배열을 인덱스 from부터 to - 1 까지 복사하여 반환한다.
int[] arr = {0, 1, 2, 3};
int[] arr1 = Arrays.copyOf(arr, arr.length); // { 0, 1, 2, 3 }
int[] arr2 = Arrays.copyOf(arr, 2); // { 0, 1 }
int[] arr3 = Arrays.copyOfRange(arr, 1, 3); // { 1, 2 }

배열 채우기

  • fill(배열, 값)
    배열의 모든 요소를 값으로 채운다.
  • setAll(배열, 함수)
    함수에 따라 배열의 요소들을 채운다.
    람다식을 지정하거나 함수형 인터페이스를 구현한 객체를 전달해야 한다.

예시

int[] arr = new int[5];
Arrays.fill(arr, 8); // { 8, 8, 8, 8, 8 }
Arrays.setAll(arr, i -> (int) (Math.random() * 5) + 1);
for (int a : arr) {
	System.out.print(a);
}

출력

45132

정렬, 검색

  • sort(배열)
    배열을 정렬한다.
    기본으로 오름차순으로 정렬하지만, Comparator를 인자로 전달해서 정렬의 기준을 정할 수 있다.
  • binarySearch(배열, 값)
    배열에서 값을 찾아서 인덱스를 반환한다.
    이진탐색 이므로 배열이 정렬되어있어야 올바른 값을 찾고, 같은 값이 없어야 올바른 값을 반환하고, 순차 검색에 비해 상당히 빠르다.

예시

int[] arr = {6, 44, 1, 3, 12};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));

System.out.println("위치: " + Arrays.binarySearch(arr, 12));

Integer[] arr1 = {6, 44, 1, 12, 3};
Arrays.sort(arr1, Collections.reverseOrder());
System.out.println(Arrays.toString(arr1));

출력

[1, 3, 6, 12, 44]
위치: 3
[44, 12, 6, 3, 1]

문자열 비교, 출력

  • toString(배열)
    문자열로 만들어서 반환한다. 일차원 배열에만 사용 가능하다.
  • deepToString(배열)
    문자열로 만들어서 반환한다. 다차원 배열에서 사용 가능하다.
  • equals(배열1, 배열2)
    두 배열에 저장된 모든 요소를 비교해서 같으면 true, 아니면 false를 반환한다. 일차원 배열에만 사용 가능하다.
  • deepEquals(배열1, 배열2)
    위와 동일하지만 다차원 배열에서 사용 가능하다.

예시

int[] arr = {6, 44, 1, 12, 3};
int[][] arr2 = {{11, 22}, {44, 33}};
int[][] arr3 = {{31, 32}, {41, 42}};
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.deepToString(arr2));
System.out.println(Arrays.deepEquals(arr2, arr3));

출력

[6, 44, 1, 12, 3]
[[11, 22], [44, 33]]
false

List 로 변환

  • asList(Object...)
    배열을 List로 변환해서 반환한다. 매개변수에 배열을 넣어도 되고 요소를 나열해도 된다.
    단, 이때 변환한 List는 크기 변경이 불가하다. 이를 해결하려면 ArrayList로 다시 변환하면 된다.

예시

List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5);
// list1.add(6); 오류 발생
System.out.println(list1);

List<Integer> list2 = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
list2.add(6);
System.out.println(list2);

출력

[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 6]

기타

  • parallel
    이 이름으로 시작하는 이름의 메서드들은 여러 쓰레드가 작업을 나누어 처리하도록 하므로 작업 속도가 빠르다.
  • spliterator()
    여러 쓰레드가 처리할 수 있게 하나의 작업을 여러 작업으로 나누는 Spliterator를 반환한다.
  • stream()
    컬렉션을 스트림으로 변환한다.

0개의 댓글