[자바의 정석]Chapter11 컬렉션 프레임웍 1.6 Arrays

임대진·2022년 3월 11일
0

1. 배열의 출력 - toString()

static String toString(boolean[] a)
static String toString(byte[] a)
static String toString(char[] a)
static String toString(short[] a)
static String toString(int[] a)
static String toString(long[] a)
static String toString(double[] a)
static String toString(Object[] a)

2.배열의 복사 - copyOf(), copyOfRange()

  • copyOf() 배열 전체 반환
  • copyOfRange() 배열의 일부를 복사해서 새로운 배열을 만들어 반환
  • copyOfRange() 지정된 범위의 끝은 포함되지 않는다.
int[] arr = {0,1,2,3,4};
int[] arr2 = Arrays.copyOf(arr, arr.length); // arr2 = [0,1,2,3,4]
int[] arr3 = Arrays.copyOf(arr, 3);              // arr3 = [0,1,2]
int[] arr4 = Arrays.copyOf(arr, 7);              // arr4 = [0,1,2,3,4,0,0]
int[] arr5 = Arrays.copyOfRange(arr, 2, 4);  // arr5 = [2,3]
int[] arr6 = Arrays.copyOfRange(arr, 0, 7);  // arr6 = [0,1,2,3,4,0,0]

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

  • fill() 배열의 모든 요소를 지정된 값으로 채운다.
  • setAll() 배열을 채우는데 사용할 함수형 인터페이스를 매개변수로 받는다.
  • 이 메서드를 호출할 때는 함수형 인터페이스를 구현한 객체를 매개변수로 지정하던가 아니면
    람다식을 지정해야한다.
int [] arr = new int[5];
Arrays.fill(arr,9);   // arr = [9,9,9,9,9]
Arrays.setAll(arr, () -> (int)(Math.random()*5)+1); //arr=[1,5,2,1,1]

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

  • sort() 배열을 정렬할 때
  • binarySearch() 배열에 저장된 요소를 검색
  • binarySearch()는 배열에서 지정된 값이 저장된 위치(index)를 찾아서 반환하는데, 반드시 배열이 정렬된 상태이어야 올바른 결과를 얻는다.
  • 만일 검색한 값과 일치하는 요소들이 여러 개 있다면, 이 중에서 어떤 것의 위치가 반환될지는 알 수 없다.
int [] arr = {3,2,-,1,4};
int idx = Arrays.binarySearch(arr,2); // idx = -5 <-- 잘못된 결과

Arrays.sort(arr); // 배열 arr을 정렬한다.
System.out.println(Arrays.toString(arr)); // [0,1,2,3,4]
int idx = Arrays.binarySearch(arr, 2);    // idx=2 <-- 올바른 결과
  • 순차검색(linear search) 배열의 첫 번째 요소부터 순서대로 하나씩 검색하는 것
  • 이 검색 방법은 배열이 정렬되어 있을 필요는 없지만 배열의 요소를 하나씩 비교하기 때문에 시간이 많이 걸린다.
  • 이진 검색(binary search) 배열의 검색할 범위를 반복적으로 절반씩 줄여가면서 검색하기 때문에 검색속도가 상당히 빠르다.
  • 배열의 길이가 10배가 늘어나도 검색 횟수는 3~4회 밖에 늘어나지 않으므로 큰 배열의 검색에 유리하다.
  • 배열이 정렬이 되어 있는 경우에만 사용할 수 있다.

5.배열의 비교와 출력 - toString(), deepToString()

  • toString()배열의 모든 요소를 문자열로 편하게 출력할 수 있다.
  • 일차원 배열에만 사용
  • deepToString() 다차원 배열에 사용
  • 2차원뿐만 아니라 3차원 이상의 배열에도 동작
int [] arr = {0,1,2,3,4};
int[][] arr2D = {{11,12}, {21,22}};

System.out.println(Arrays.toString(arr)); // [0,1,2,3,4]
System.out.println(Arrays.deepToString(arr2D)); // [[11,12],[21,22]]

6.다차원 배열 비교 - equals(), deepEquals()

  • equals()는 두 배열에 저장된 모든 요소를 비교해서 같으면 true, 다르면 false를 반환
  • 일차원 배열에만 가능
  • deepEquals() 다차원 배열 비교 사용
String[][] str2D = new String[][]{{"aaa","bbb"},{"AAA","BBB"}};
String[][] str2D2 = new String[][]{{"aaa","bbb"},{"AAA","BBB"}};

System.out.println(Arrays.equals(str2D, str2D2));     // false
System.out.println(Arrays.deepEquals(str2D, str2D2);  // true

7.배열을 List로 변환 - asList(Object..a)

  • asList()는 배열을 List에 담아서 반환한다.
List list = Arrays.asList(new Integer[]{1,2,3,4,5});  // list =[1,2,3,4,5]
List list = Arrays.asList(1,2,3,4,5);                 // lsit =[1,2,3,4,5]
list.add(6); // UnsupportedOperationException 예외 발생
  • asList()가 반환한 List의 크기를 변경할 수 없다는 것
  • 추가 또는 삭제가 불가능하다.
  • 저장된 내용은 변경가능

List list = new ArrayList(Arrays.asList(1,2,3,4,5));
profile
신입개발자 공부기록 블로그

0개의 댓글