1.6 Arrays
Arrays클래스에는 배열을 다루는데 유용한 메서드가 정의되어 있다.
❗Arrays에 정의된 메서드는 모두 static메서드이다.
Arrays에 정의된 toString()
static String toString(Object[] a)
static String toString(int[] a)
//그외 기본형
배열의 복사 - copyOf(), copyOfRange()
copyOf() - 배열의 전체를 복사해서 새로운 배열을 만들어 반환
copyOfRange() - 배열의 일부를 복사해서 새로운 배열을 만들어 반환(끝은 포함x)
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] <-4는 불포함
int[] arr6 = Arrays.copyOfRange(arr, 0, 7); //arr6=[0,1,2,3,4,0,0]
배열 채우기 - fill(), setAll()
fill() - 배열의 모든 요소를 지정된 값으로 채운다.
setAll() - 배열을 채우는데 사용할 함수형 인터페이스를 매개변수로 받는다.
*함수형 인터페이스를 구현한 객체를 매개변수로 지정 or 람다식을 지정해야함
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]
배열의 정렬과 검색 - sort(), binarySearch()
sort() - 배열을 정렬할 때 사용
binarySearch() - 배열에 저장된 요소를 검색할 때 사용(반드시 배열이 정렬된 상태이어야 올바른 결과를 얻는다.)
int[] arr = {3,2,0,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) : 배열의 검색할 범위를 반복적으로 절반씩 줄여가면서 검색(속도빠름, 단, 배열이 정렬이 되어 있는 경우에만 사용할 수 있다.)
배열의 비교와 출력 - equals(), toString()
toString() - 배열의 모든 요소를 문자열로 편리하게 출력할 수 있다.(일차원 배열에서만 사용 가능)
deepTo String() - 배열의 모든 요소를 재귀적으로 접근해서 문자열을 구성(다차원 배열에서 사용)
int[] arr = {0,1,2,3,4};
int[][] arr2D = {{11,12}, {21,22}};
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.deepToString(arr2D));
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
배열을 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); //list = [1,2,3,4,5]
list.add(6); //UnsupportedOperationException 예외 발생 //읽기 전용
1.7 Comparator와 Comparable
Arrays.sort()를 호출만 하면 알아서 배열을 정렬하는게 아니라 Character클래스의 Comparable의 구현에 의해 정렬되었던 것
Comparator와 Comparable은 모두 인터페이스로 컬렉션을 정렬하는데 필요한 메서드를 정의하고 있다
Comparable : 기본 정렬기본을 구현하는데 사용
Comparator : 기본 정렬기준 외에 다른 기준으로 정렬하고자할 때 사용
compare()와 compareTo()는 선언형태와 이름이 약간 다를 뿐 두 객체를 비교한다는 같은 기능을 목적으로 고안된 것
출처 : 남궁성. 「자바의 정석」. 도우출판. 2016
'프로그래밍언어 > Java' 카테고리의 다른 글
[자바의 정석] 11. 컬렉션 프레임웍 - HashMap과 Hashtable / TreeMap (0) | 2023.08.07 |
---|---|
[자바의 정석] 11. 컬렉션 프레임웍 - HashSet / TreeSet (0) | 2023.08.06 |
[자바의 정석] 11. 컬렉션 프레임웍 - Iterator, ListIterator, Enumeration (0) | 2023.08.06 |
[자바의 정석] 11. 컬렉션 프레임웍 - Stack과 Queu (0) | 2023.08.06 |
[자바의 정석] 11. 컬렉션 프레임웍 - LinkedList (0) | 2023.08.06 |