아래 내용은 코테용 정렬 정리본입니다.
int[] arr1 = {5,2,8,1,9};
//오름차순
Arrays.sort(arr1); // 1,2,5,8,9
//범위 지정 정렬 (0~2번 인덱스만 정렬
Arrays.sort(arr1, 0, 3); // 2,5,8,1,9
Integer[] arr = {5,2,8,1,9};
Arrays.sort(arr, Collections.reverseOrder());
String[] strArr = {"banana", "apple", "cherry"};
Arrays.sort(strArr); //apple, banana, cherry
Integer[] arr = {5, 2, 8, 1, 9};
Arrays.sort(arr, (a, b)-> a-b); //오름차순
Arrays.sort(arr, (a,b)-> b-a); //내림차순
Integer[] arr = {5, 2, 8, 1, 9};
Arrays.sort(arr, (o1, o2)-> {
if(o1 %2 !=0 && o2%2 ==0) return -1; //o1이 홀수 일때 우선
if (o1 % 2 == 0 && o2 % 2 != 0) return 1;
return o1-o2; //오름 차순
});
List<Integer> list = new ArrayList<>(Arrays.asList(5,2,8,1,9));
//오름차순
Collections.sort(list);
//내림차순
Collections.sort(list, Collections.reverseOrder());
list.sort(Comparator.naturalOrder());
list.sort(Comparator.reverseOrder());
//오름차순
list.sort((a,b)-> a-b);
Class Person implements Comparable<Person>{
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int compareTo(Person other){
return this.age - other.age; //나이 기준 오름 차순
}
@Override
publis String toString(){
return name + "(" + age + ")";
}
}
List<Person> people = new ArrayList<>();
people.add(new Person("김철수", 25));
people.add(new Person("이영희", 20));
people.add(new Person("박민수", 30));
Collections.sort(people); //compareTo()기준 정렬
//역순 정렬
Collections.sort(people, Collections.reverseOrder());
class Student {
String name;
int score;
int age;
public Student(String name, int score, int age) {
this.name = name;
this.score = score;
this.age = age;
}
@Override
public String toString() {
return name + "(" + score + "점, " + age + "세)";
}
}
List<Student> students = new ArrayList<>();
students.add(new Student("김철수", 85, 20));
students.add(new Student("이영희", 90, 22));
students.add(new Student("박민수", 85, 21));
//1. 점수 기준 내림차순
students.sort((s1, s2)-> s2.score - s1.score);
//2. 점수가 같으면 나이 오름차순
students.sort((s1,s2) -> {
if(s1.score!=s2.score){
return s2.score- s1.score; //점수 내림차순
}
return s1.age - s2.age; //나이 오름차순
}
//3. Comparator 메서드 체이닝 !!
students.sort(Comparator.comparingInt((Student s) -> s.score).reversed()
.thenComparingInt(s-> s.age);
// 4. 이름 기준 사전 순
students.sort(Comparator.comparing(s-> s.name));
int[][] arr = {{3, 5}, {1, 2}, {5, 3}, {1, 7}};
//1. 첫번째 원소 기준 오름차순
Arrays.sort(arr, (a, b)-> a[0]- b[0]);
//2. 첫번째 같으면 두번째 기준
Arrays.sort(arr, (a, b)-> {
if(a[0] !=b[0]) return a[0] - b[0]; //첫번째 오름차순
return a[1]- b[1]; //두번째 오름차순
});
//3. 두번째 원소 기준 내림차순
Arrays.sort(arr, (a, b)-> b[1]- a[1]);
// 1. 최소 힙
PrioriyQueue<Integer> minHeap = new PrioriyQueue<>();
minHeap.addAll(Arrays.asList(5,2,8,1,9));
//출력- 최소 힙
while(!minHeap.isEmpty()){
System.out.print(minHeap.poll() + " " );
}
// 2. 최대힙
PrioriyQueue<Integer> maxHeap = new PrioriyQueue<>(Collections.reverseOrder());
maxHeap.addAll(Arrays.asList(5,2,8,1,9));
while(!minHeap.isEmpty()){
System.out.print(minHeap.poll() + " " );
}
TreeSet<Integer> treeSet = new TreeSet<>(Arrays.asList(5, 2, 8, 1, 9, 2));
System.out.println("TreeSet (중복 제거): " + treeSet);
TreeMap<String, Integer> treeMap = new TreeMap<>();
treeMap.put("banana", 3);
treeMap.put("apple", 1);
treeMap.put("cherry", 2);
System.out.println("TreeMap: " + treeMap);
String[] words = {"apple", "pie", "banana", "cat"};
//1. 길이 기준 정렬
Arrays.sort(words, (a,b) -> a.length() - b.length());
//2. 길이 같으면 사전순
Arrays.sort(words, (a, b)-> {
if(a.length() != b.length()) return a.length()- b.length();
return a.compareTo(b);
});
//3. 대소문자 구분 없이 정렬
String[] words3 = {"Apple", "banana", "Cherry"};
Arrays.sort(words3, String.CASE_INSENSITIVE_ORDER);
Integer[] arr1 = {-5, 2, -8, 1, 9};
Arrays.sort(arr1, (a,b)-> Math.abs(a)- Math.abs(b));
int target = 5;
Integer[] arr2 = {1, 3, 7, 9, 2};
Arrays.sort(arr2, (a, b)-> Math.abs(a-target)- Math.abs(b-target));
Integer[] arr3 = {1, 1, 2, 2, 2, 3};
Map<Integer, Integer> freqMap = new HashMap<>();
for (int num: arr3){
freqMap.put(num, freqMap.getOrDefault(num, 0) +1);
}
//빈도수 내림차순
Arrays.sort(arr3, (a,b)-> freqMap.get(b) - freqMap.get(a));
- 기본 타입(int[]): O(n log n) - Dual-Pivot Quicksort”
- 객체 타입(Integer[]): O(n log n) - TimSort”