본문 바로가기

Java

Arrays, Comparable, Comparator

출처 - Java의 정석 기초편 (남궁 성)

 

 

1. Arrays클래스

- 배열을 다루는데 유용한 메서드(모두 static) 제공

- 매개변수 타입 오버로딩

 

 

2. 배열→문자열 출력

- to String(): 일차원 배열

- deepToString(): 다차원 배열

 

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]]

 

 

3. 배열 복사

- copyOf(): 배열 전체

- copyOfRange(): 배열 일부

 

int[] arr = {0,1,2,3,4};
int[] arr2 = Arrays.copyOf(arr, 3); // arr2=[0,1,2]
int[] arr3 = Arrays.copyOf(arr, 7); // arr3=[0,1,2,3,4,0,0]
int[] arr4 = Arrays.copyOfRange(arr, 2, 4); // arr4=[2,3]

 

 

4. 배열 채우기

- fill(): 값 지정

- setAll(): 람다식 지정

 

int[] arr = new int[5];
Arrays.fill(arr, 9); // arr=[9,9,9,9,9]
Arrays.setAll(arr, (i) -> (int)(Math.random()*5)+1); // arr=[1,5,2,1,1]

 

 

5.배열 정렬, 검색

- sort(): 정렬

- binarySearch(): 이진 검색→정렬 필요, 지정된 값이 저장된 위치(index) 반환

 

int[] arr = {3,2,0,1,4};
Arrays.sort(arr);
System.out.println(Arrays.tostring(arr)); // [0,1,2,3,4]
int idx = Arrays.binarysearch(arr, 2); // idx=2

 

 

6. 배열 비교

- equals(): 일차원 배열

- deepEquals(): 다차원 배열

 

String[][] str2D  = new String[][]{{"aaa", "bbb"}, {"AAA", "BBB"}};
String[][] str2D2 = new String[][]{{"aaa", "bbb"}, {"AAA", "BBB"}};

System.out.println(Arrays.equals(2tr2D, str2D2)); // false (배열의 배열→주소 비교)
System.out.println(Arrays.deepEquals(2tr2D, 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); // list=[1,2,3,4,5]
list.add(6); // UnsupportedOperationException 예외 발생

List list = new ArrayList(Arrays.asList(1,2,3,4,5)); // 복사되어 생성되어 크기 변경 가능

 

 

8. parallelXXX(), spliterator(), stream()

- 람다와 스트림 관련

 

 

9. Comparable, Comparator

- 객체 정렬에 필요한 메서드 정의한 인터페이스

- 정렬이란? 두 대상 비교→자리 바꿈

- Comparable: 기본 정렬기준(default)

- Comparator: 기본 정렬기준 외 다른 기준으로 정렬

- compare(), compareTo(): 두 객체의 비교 결과를 반환하도록 작성(같으면 o, 왼쪽이 크면 양수, 오른쪽이 크면 음수)

 

public interface Comparator {
    int compare(Object o1, Object o2); // o1과 o2비교
    boolean equals(Object obj); // 오버라이딩이 필요할 수도 있다는 것 알리기 위해 정의한 것뿐
}

public interface Comparable {
    int compareTo(Object o); // 객체 자신(this)과 o 비교
}

 

- Arrays.sort()

- String, Integer, Float는 자체적으로 Comparable 구현한 내부 정렬기준 있음

 

static void sort(Object[] a) // 객체 배열에 저자된 객체가 구현한 Comparable에 의한 정렬
static void sort(Object[] a, Comparator c) // 지정한 Comparator에 의한 정렬

String[] strArr = {"cat", "Dog", "lion", "tiger"};

Arrays.sort(strArr); // String의 Comparable 구현에 의한 정렬
Arrays.sort(strArr, String.CASE_INSENSITIVE_ORDER); // 대소문자 구분없이 정렬

 

 

 

'Java' 카테고리의 다른 글

HashMap, TreeMap, Collections  (0) 2022.10.30
HashSet, TreeSet(binary search tree)  (0) 2022.10.29
Iterator  (0) 2022.10.28
스택(Stack), 큐(Queue)  (0) 2022.10.28
ArrayList, LinkedList  (0) 2022.10.27