가자미의 개발이야기
자바 컬렉션 기반 알고리즘 본문
-정렬
--public static <T extends Comparable<T>> void sort(List<T> list)
---Coparable을 구현하는 T를 가진 제네릭 메소드
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.ArrayList;
public class SortPractice {
public static void main(String[] args) {
List<String> list = Arrays.asList("TOY","BOX","ROBOT");
list= new ArrayList(list);
Collections.sort(list);//정렬
//public static <T extends Comparable<T>> void sort(List<T> list)
}
}
|
cs |
--public static <T extends Comparable<? super T>> void sort(List<T> list)
---Comparable을 구현한 어떤 것의 자식 T를 가진 제네릭
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;
class Car implements Comparable<Car>{
private int disp;
public Car(int d) {disp=d;}
@Override
public int compareTo(Car o) {
return disp-o.disp;
}
}
class ECar extends Car{
public ECar(int d) {super(d);}
}//Comparable<Car>를 간접 구현. Comparable<ECar>는 구현되지 않음!!(제네릭은 타입매개변수가 다르면 상속 안됨)
public class SortPractice {
public static void main(String[] args) {
List<ECar> list = new ArrayList<>();
list.add(new ECar(1200));
list.add(new ECar(3000));
list.add(new ECar(1800));
Collections.sort(list); //정렬
for(Iterator<ECar> itr = list.iterator();itr.hasNext();)
System.out.print(itr.next().toString()+'\t');
}
}
|
-정렬 : Comparator<T>기반
--public static <T> void sort(List<T> list, Comparator<? super T> c)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
import java.util.Collections;
import java.util.List;
import java.util.ArrayList;
import java.util.Comparator;
class Car{
int disp;
public Car(int d) {disp=d;}
}
class ECar extends Car{
public ECar(int d) {super(d);}
}
class CompCar implements Comparator<Car>{
public int compare(Car o1, Car o2) {
return o1.disp-o2.disp;
}
}
public class SortPractice {
public static void main(String[] args) {
List<Car> clist = new ArrayList<>();
clist.add(new Car(1200));
clist.add(new Car(3000));
List<ECar> elist = new ArrayList<>();
elist.add(new ECar(1300));
elist.add(new ECar(1800));
CompCar comp = new CompCar(); //Comparator 인스턴스생성
Collections.sort(clist,comp);//각각 정렬
Collections.sort(elist,comp);
}
}
|
cs |
-찾기
--public static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key)
---T의 부모 클래스에 해당하며 comparable을 구현한 누군가의 리스트에서 해당 값을 찾음
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
public class BinarySerachPractice {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Box");
list.add("Robot");
list.add("Apple");
Collections.sort(list);
int idx = Collections.binarySearch(list, "Box");
System.out.println(list.get(idx));
}
}
|
cs |
-찾기 : Comparator<T>기반
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
class StrComp implements Comparator<String>{
@Override
public int compare(String s1, String s2) {
return s1.compareToIgnoreCase(s2);//대소문자 구분 없이 비교
}
}
public class BinarySerachPractice {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Box");
list.add("Robot");
list.add("Apple");
StrComp cmp = new StrComp(); //정렬과 탐색기준
Collections.sort(list, cmp);//정렬
int idx = Collections.binarySearch(list, "Box", cmp);//탐색
System.out.println(list.get(idx));
}
}
|
cs |
-복사
--public static <T> void copy(List<? super T> dest, List<? extends T> src)
--dest는 T형 인스턴스 넣는 것만 허용하겠다!
--src는 T형 인스턴스 꺼내는 것만 허용하겠다.
'Java > 자바 기본 문법' 카테고리의 다른 글
자바 매개변수의 가변 인자 선언 & 어노테이션 (0) | 2021.02.03 |
---|---|
자바 열거형 (0) | 2021.02.03 |
자바 컬렉션 프레임워크 Map<K,V> : HashMap (0) | 2021.02.02 |
자바 컬렉션 프레임워크 Set<E> : HashSet, TreeSet (0) | 2021.02.02 |
자바 컬렉션 프레임워크-List<E> : ArrayList, LinkedList, Stack, Queue (0) | 2021.02.02 |