관리 메뉴

보리차

chapter 24 컬렉션 프레임워크 2 본문

Java

chapter 24 컬렉션 프레임워크 2

보리콩 2022. 2. 28. 17:37

컬렉션 기반 알고리즘

정렬

public static <T extends Comparable<? super T>> void sort(List<T> list)

이때,  T는 Comparable<T> 인터페이스를 구현한 상태이어야 한다. (순서를 정할 수 있어야 하므로)

import java.util.Collections;

Collections.sort(list);

여기서 Comparable<T>가 아닌 Comparable<? super T> 이유는 T가 특정 클래스를 상속하면서 Comparable메소드를 간접 구현하는 경우를 위함이다.

 

정렬: Comaprator<T> 기반

public static <T> void sort(List<T> list, Comparator<? super T> c)

예제

import java.util.List;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Collections;

class Car {
    protected int disp;
}

// Car의 정렬을 위한 클래스
class CarComp immplements Comparator<Car> {
    @Override
    public imt compare(Car o1, Car o2) { return o1.disp - o2.disp; }
}

class ECar extend Car {
    private int battery;
}

class CarComparator {
    public static void main(String[] args) {
        List<Car> clist = new ArrayList<>();
        clist.add(new Car(1800));
        ...
        
        List<ECar> elist = new ArrayList<>();
        elist.add(new ECar(3000, 55));
        ...
        
        CarComp comp = new CarComp();
        
        // 각각 정렬
        Collections.sort(clist, comp);
        Collections.sort(elist, comp);
    }
}

예제를 보면 Car의 정렬을 위해 정의한 클래스의 인스턴스로 ECar도 정렬할 수 있음을 알 수 있다.

 

찾기

public static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key)

binarySearch 메소드를 사용하기 위해선 당연히 리스트가 정렬된 상태여야 한다.

 

찾기: Comparator<T> 기반

public static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c)

Comparator<T>를 구현하는 클래스를 정의하여 탐색의 기준을 제시할 수 있다.

 

복사하기

public static <T> int copy(List<? extends T> dest, List<? extends T> src)

src의 내용을 dest로 복사한다.

이때 dest에는 T형 인스턴스를 넣는 것만, src는 T형 인스턴스를 꺼내는 것만 허용하고 있는 것을 알 수 있다.

 

'Java' 카테고리의 다른 글

chapter 23 컬렉션 프레임워크1(2)  (0) 2022.02.23
chapter 23 컬렉션 프레임워크 1(1)  (0) 2022.02.23
chapter 22 제네릭(Generics) 2  (0) 2022.02.16
chapter 21 제네릭(Generics) 1  (0) 2022.02.15
chapter 20 자바의 기본 클래스  (0) 2022.02.10