
Contents
1. 정렬(Sorting) : 가장 중요한 컴퓨터 알고리즘여러 유용한 알고리즘을 구현한 메서드 들을 제공해줌
Collections 클래스가 제공해주는 메서드 : 제네릭 사용
정적 메소드
첫 번째 매개 변수 : 알고리즘이 적용되는 컬렉션이 됨
중요한 알고리즘
1. 정렬(Sorting) : 가장 중요한 컴퓨터 알고리즘
데이터를 어떤 기준에 의하여 순서대로 나열하는 것
종류 : 퀵 정렬, 합병 정렬, 히프 정렬 등
합병 정렬 : Collections 클래스의 정렬에서 사용됨
속도가 비교적 빠르고 안정성이 보장됨
시간 복잡도가 O(nlog(n))
거의 정렬된 리스트에 대해서는 상당히 빠름
sort() : List 인터페이스를 구현하는 컬렉션에 대한 정렬을 수행
List<String> list = new LinkedList<String>();
list.add("김철수");
list.add("김영희");
Collections.sort(list); // 리스트 안의 문자열 정렬
String 타입 > 알파벳 순서
Date 타입 > 시간 순서
가능한 이유 : Comparable 인터페이스 사용
문자열 정렬하기
package ex13;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class SortTest {
public static void main(String[] args) {
String[] sample = {"i", "walk", "the", "line"};
List<String> list = Arrays.asList(sample);
Collections.sort(list);
System.out.println(list);
}
}

사용자 클래스의 객체 정렬하기
package ex13;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
class Student implements Comparable<Student> {
int number;
String name;
public Student(int number, String name) {
this.number = number;
this.name = name;
}
public String toString() {
return name;
}
public int compareTo(Student s) {
return s.number - number;
}
}
public class SortTest1 {
public static void main(String[] args) {
Student array[] = {
new Student(2, "김철수"),
new Student(3, "이철수"),
new Student(4, "박철수"),
};
List<Student> list = Arrays.asList(array);
Collections.sort(list); // 순서대로
System.out.println(list);
Collections.sort(list, Collections.reverseOrder()); // 역순으로
System.out.println(list);
}
}

CompareTo() : 매개 변수 객체를 현재의 객체와 비교
> 작으면 음수 반환
> 같으면 0 반환
> 크면 양수 반환
2. 섞기(Shuffling) : 정렬의 반대 동작을 함
리스트에 존재하는 정렬을 파괴하여서 원소들의 순서를 랜덤하게 만듦
게임을 구현할 때, 테스트할 때 용이 함
package ex13;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Shuffle {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
for (int i = 1; i <= 10; i++) {
list.add(i);
}
Collections.shuffle(list);
System.out.println(list);
}
}

3. 탐색(Searching)
리스트 안에서 원하는 원소를 찾는 것
선형 탐색 : 정렬되어있지 않아 모든 원소를 다 탐색
이진 탐색 : 정렬되어있어 중간에 있는 원소와 먼저 비교해서 탐색
binarySearch 알고리즘 : 정렬된 리스트에서 지정된 원소를 이진탐색한 것
index = Collections.binarySearch (collec. element);
반환값이 양수 > 탐색이 성공한 객체 위치
음수 > 탐색 실패, 도움이 되는 정보가 반환
숫자들의 리스트 탐색하기
package ex13;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Search1 {
public static void main(String[] args) {
int key = 50;
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 100; i++) {
list.add(i);
}
int index = Collections.binarySearch(list, key);
System.out.println("탐색의 반환값 =" + index);
}
}

Share article