Programming/Java

[Java] Arrays와 Collections의 제공 메서드

kmindev 2023. 11. 3. 15:35

남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다.

 

1. Arrays


  • 배열을 다루기 편리한 static 메서드 제공

 

a. 배열 출력 - toString(), deeptoString()

  • toString(): 1차원 배열 출력
  • deepToString(): 2차원 배열 출력
int[] arr1 = {1, 2, 3, 4, 5};
int[][] arr2 = {{11, 12}, {21, 22}};

Arrays.toString(arr1); // [1, 2, 3, 4, 5]
Arrays.deepToString(arr2); // [[11, 12], [21, 22]]

 

b. 배열 비교 - deepEquals(), equals()

  • equals(): 1차원 배열 비교
  • deepEquals: 2차원 배열 비교
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = {1, 2, 3, 4, 5};
int[][] arr3 = {{11, 12}, {21, 22}};
int[][] arr4 = {{11, 12}, {21, 22}};

Arrays.equals(arr1, arr2) // true
Arrays.equals(arr3, arr4) // false
Arrays.deepEquals(arr3, arr4) // true

 

c. 배열 복사 - copy(), copyOfRange()

  • copy(arr, i): arr 배열의 index 0부터 i -1 까지 복사
  • copyOfRange(arr, start, end): arr 배열의 index가 start부터 end -1 까지 복사
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]
int[] arr3 = Arrays.copyOf(arr, 7); // [0, 1, 2, 3, 4, 0, 0]
int[] arr4 = Arrays.copyOfRange(arr, 2, 4); //  [2, 3]
int[] arr5 = Arrays.copyOfRange(arr, 0, 7); // [0, 1, 2, 3, 4, 0, 0]

 

d. 배열 채우기 - fill(), setAll()

  • fill(arr, val): arr 배열을 val로 채우기
  • setAll(arr, generator): arr 배열을 람다식 결과로 채우기
int[] arr = new int[5];

Arrays.fill(arr, 5); // arr=[5, 5, 5, 5, 5]
Arrays.setAll(arr, i -> (int) (Math.random() * 5) + 1); // 람다식 사용 , arr=[4, 3, 1, 5, 5]

 

e. 배열 정렬과 검색 - binarySearch(), sort()

  • binarySearch(arr, val): arr에서 val을 이진탐색하여 인덱스를 반환
  • sort(arr): arr 정렬
int[] arr = {3, 2, 0, 1, 4};
// binarySearch는 정렬된 상태에서 올바른 결과를 얻을 수 있다.
int idx = Arrays.binarySearch(arr, 2); // idx = -5 (잘못된 결과) 

Arrays.sort(arr); // arr=[0, 1, 2, 3, 4]
idx = Arrays.binarySearch(arr, 2); // 2

 

f. 배열 List로 변환 - asList(Object… a)

  • asList(Object… a): 배열 ⇒ 리스트
List list1 = Arrays.asList(new Integer[]{1, 2, 3, 4, 5}); // [1, 2, 3, 4, 5]
List list2 = Arrays.asList(1, 2, 3, 4, 5); // [1, 2, 3, 4, 5]

list1.add(6); // 에러 발생(크기를 변경할 수 없다.)

 

 

2. Collections


  • Arrays와 마찬가지로 fill(), copy(), sort(), binarySearch() 등의 메서드를 제공한다.

 

a. 동기화

  • 멀티쓰레드 환경에서 하나의 객체를 여러 쓰레드가 동시에 접근할 경우 동기화가 필요하다.
List list = Collections.synchronizedList(new ArrayList<>());
Map map = Collections.synchronizedMap(new HashMap<>());
...

 

b. 변경불가 컬렉션

  • 컬렉션에 저장된 데이터를 보호하기 위해 읽기 전용으로 변경
List list = Collections.unmodifiableList(new ArrayList<>());

list.add(3); // 에러

 

c. 싱글톤 컬렉션

  • 단 하나의 객체만을 저장하는 컬렉션
List list = Collections.singletonList(new Person("홍길동", 15));

list.add(new Person("이순신", 25)); // 에러