다만 이렇게 변환하여 반환한 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};
// list = [1, 2, 3, 4, 5]
list.add(6);
//예외발생!! 값 변경 불가능 / 읽기만 가능
만약 진짜 List컬렉션으로 만들어서 사용하고 싶다면
ArraysList 또는 LinkedList를 새로 만들어서 할당하여 사용하면 된다.
List list = new ArrayList(Arrays.asList(1, 2, 3, 4, 5));
list.add(6); // 정상작동
--
배열 정렬 및 검색 - sort, binarySearch()
--
sort() : 배열의 요소(내용)를 정렬
binarySearch() : 배열의 요소(내용)를 검색
binarySearch()는 정렬된 배열에서 사용해야 한다.
[이진 탐색 과정 예시] 1 ~ 10 값을 가진 배열에서 7값을 찾는 과정
1. 첫 번째 탐색 배열 범위 low = 0, high = 9로 중간 인텍스 계산 = (low + high) / 2 = 4 즉 배열의 중간 값은 arr[4] = 5
찾은 중간값과 목표값인 7을 비교하여 목푯값이 더 큰지 작은지 판단 - 중앙값(5)이 목표값(7)보다 작음 = 중앙값(5)을 기준으로 우측으로 탐색 범위로 좁힘
2. 두 번째 탐색 배열 범위 low = 5, high = 9로 중간 인텍스 계산 = (low + high) / 2 = 7 즉 배열의 중간 값은 arr[7] = 8
찾은 중간값과 목표값인 7을 비교하여 목푯값이 더 큰지 작은지 판단 - 중앙값(8)이 목표값(7)보다 큼 = 중앙값(8)을 기준으로 좌측으로 탐색 범위로 좁힘
3. 세 번째 탐색 배열 범위 low = 5, high = 6로 중간 인텍스 계산 = (low + high) / 2 = 5 즉 배열의 중간 값은 arr[5] = 6
찾은 중간값과 목표값인 7을 비교하여 목푯값이 더 큰지 작은지 판단 - 중앙값(6)이 목표값(7)보다 작음 = 중앙값(6)을 기준으로 우측으로 탐색 범위로 좁힘
4. 네 번째 탐색 배열 범위 low = 6, high = 6로 중간 인텍스 계산 = (low + high) / 2 = 6 즉 배열의 중간 값은 arr[5] = 7
찾은 중간값과 목표값인 7을 비교하여 목푯값이 더 큰지 작은지 판단 - 중앙값(7)이 목표값(7)과 동일 = 즉시 탐색 종료
위와 같은 방식으로 탐색하기 때문에 요소의 값들이 정렬되어 있어야 한다.
int[] arr = {3, 2, 0, 1, 4};
int idx = Arrays.binarySearch(arr, 2);
// idx = -5 잘못된 결과가 나옴
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
// [0, 1, 2, 3, 4]
int idx = Arrays.binarySearch(arr, 2);
// idx = 2 올바른 결과가 나옴