남궁성님의 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)); // 에러
'Programming > Java' 카테고리의 다른 글
[Java] 해싱과 equals() hashCode (0) | 2023.11.03 |
---|---|
[Java] Comparator, Comparable 인터페이스 (0) | 2023.11.03 |
[Java] Iterator, ListIterator, Enumeration 반복자 (0) | 2023.11.03 |
[Java] 스택, 큐, 우선순위 큐, 덱 이란? (0) | 2023.11.03 |
[Java] LinkedList, ArrayList 비교 (0) | 2023.11.03 |