쉽게 쉽게

Arrays와 Collections 본문

개발공부/Java

Arrays와 Collections

곱마2 2023. 3. 24. 19:39
반응형

이 글은 '자바의 정석'의 내용을 기반으로 공부한 내용을 덧붙인 글입니다.


1. Arrays

Arrays에는 배열을 다루는데 유용한 메서드가 정의되어 있다.

copyOf(arr, arr.length)
길이만큼 배열 복사

copyOfRange(arr, from, to)
from부터 to까지 복사(to는 범위에 포함x)


fill(arr, 값)
배열의 모든 요소를 지정된 값으로 채움

setAll(arr, 함수형 인터페이스 or 람다식)
배열을 채울 함수형 인터페이스(math.random())을 매개변수로

sort(arr)
배열을 정렬

binarySearch(arr,위치)
배열에 저장된 요소를 검색해서 위치 반환(정렬된 상태야 올바른 결과,이진 검색으로 속도가 빠름)

equals()
요소 비교

toString()
문자열로 출력

asList()
배열을 List로 전환
Arrays.aslist(1,2,3,4,5) - 단 배열의 크기 변경 불가능(추가,삭제 불가능)
new ArrayList(Arrays.aslist(1,2,3,4,5)) - ArrayList로 변환

(1) Comparator와 Comparable

Arrays.sort()를 호출하면 알아서 정렬이 되는 것 처럼 보이지만, 사실은 Comparable의 구현에 의해 정렬되었던 것이다.

Comparator와 Comparable는 모두 인터페이스로 컬렉션을 정렬하는데 필요한 메서드를 정의하고 있다.

Comparable은 자기 자신과 파라미터로 들어오는 객체를 비교하는 것이고, Comparator는 자기 자신의 상태가 어떻든 상관없이 파라미터로 들어오는 두 객체를 비교하는 것이다. 즉, 본질적으로 비교한다는 것 자체는 같지만, 비교 대상이 다르다는 것이다.

 

Comparable는 기본 정렬을 구현하는 데 사용

int[] scores = {899, 982, 1090, 982, 1018};
Arrays.sort(scores);

public class T implements Comparable<T> {
    // Fields, Getters, Setters 생략

    @Override
    public int compareTo(T o) {
        return o.getScore() - getScore();
    }
}

점수와 같이 정렬이 가능한 객체는 Comparable가 자동으로 정렬을 해준다.

하지만 특정 타입의 객체는 기본형 데이터와 달리 정렬 기준이 없으면 정렬을 할 수가 없으며, 따라서 정렬 기준을 정의하여 알려줘야한다.

Comparable 인터페이스에는 compareTo(T o) 메소드 하나가 선언되어있는 것을 볼 수 있다.

Comparable을 사용하고자 한다면 compareTo 메소드를 재정의(Override/구현)을 해주어야 한다는 것이다.

"o.getScore() - getScore();" 부분을 원하는 정렬 조건으로 바꿔주면 된다.

Comparator는 정렬 하고자 하는 객체에 이미 존재하고 있는 정렬 기준과 다른 정렬 기준으로 정렬을 하고 싶을 때 사용한다.
compare(T o1, T o2)를 변경해주면 된다.

예시1
Comparator<T> comparator = new Comparator<T>() {
    @Override
    public int compare(T a, T b) {
        return b.getScore() - a.getScore();
    }
};

예시2
class Descending implements comparator{
    @Override
    public int compare(object o1, object o2){
    if(o1 instanceof comparable && o2 instanceof comparable){
        comparable c1 = (comparable)o1;
        comparable c2 = (comparable)o2;
    return c1.compareTo(c2) 
// 기본 정렬(오름차순)
// 여기서 –1을 곱하면 역순(내림차순)으로 정렬 가능
}
return -1;
}

출처

 

자바 [JAVA] - Comparable 과 Comparator의 이해

아마 이 글을 찾아 오신 분들 대개는 Comparable과 Comparator의 차이가 무엇인지 모르거나 궁금해서 찾아오셨을 것이다. 사실 알고보면 두 개는 그렇게 어렵지 않으나 아무래도 자바를 학습하면서 객

st-lab.tistory.com

2. Collections

Collections는 컬렉션과 관련된 메서드를 제공한다.
Arrays와 동일한 fill(), copy(), sort(), binarySearch() 등의 메서드 있음

아래는 추가적인 Collections의 메서드 목록이다.

min, max
최소값,최대값 

swap()
순서 교환

shuffle()
순서 뒤섞기

disjoint()
두 개의 컬렉션을 비교해서 일치하는 값이 하나도 없으면 true, 하나라도 있으면 false 반환
잘못된 내용이 있다면 지적부탁드립니다. 방문해주셔서 감사합니다.

 

 

반응형

'개발공부 > Java' 카테고리의 다른 글

쓰레드  (1) 2023.03.28
지네릭스(Generics)  (0) 2023.03.27
컬렉션 프레임웍  (0) 2023.03.23
날짜와 시간  (0) 2023.03.22
Java.lang 패키지  (0) 2023.03.21