가자미의 개발이야기

자바 컬렉션 기반 알고리즘 본문

Java/자바 기본 문법

자바 컬렉션 기반 알고리즘

가자미 2021. 2. 3. 11:45

-정렬

--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형 인스턴스 꺼내는 것만 허용하겠다.