보리차
chapter 24 컬렉션 프레임워크 2 본문
컬렉션 기반 알고리즘
정렬
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 |