예제 - 1
import java.util.Arrays;class Person implements Comparable<Person> { String name; int age; String job; int score; public Person(String name, int age, String job, int score) { this.name = name; this.age = age; this.job = job; this.score = score; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", job=" + job + ", score=" + score + "]\n"; } @Override public int compareTo(Person o) { //정렬의 기준을 정의~!! //this(Person)의 속성과 o(Person)의 속성을 비교 //비교방법 this.속성 - o.속성 //결과: 음수, 0, 양수 ==> 음수의 경우 swap을 해줌 ==> 오름차순 정렬 // return this.age - o.age; //오름차순정렬 //만약 내림차순 정렬을 하고 싶다!! //1 //return o.age - this.age; //2 return -(this.age - o.age) ; } }public class ArraySortTest { public static void main(String[] args) { int[]su= {13, 8, 7, 10, 100, 5}; char[]ch= {'A','l','g','o','r','i','t','h','m'}; String[]names= {"홍길동","길라임","김주원"}; //API를 사용하여 배열에 대한 오름차순 정렬을 하자!! Arrays.sort(su); Arrays.sort(ch); Arrays.sort(names); //배열 내용 출력 System.out.println("정수배열>>"+Arrays.toString(su)); System.out.println("문자배열>>"+Arrays.toString(ch)); System.out.println("문자열배열>>"+Arrays.toString(names)); //객체 배열 정렬 Person p = new Person("갓길동",11,"학생",95);// ==> 이름 나이 직업 점수 Person[] persons= {p , new Person("빛길동",19,"학생",80), new Person("남길동",14,"학생",100), new Person("여길동",17,"학생",99), new Person("킹길동",15,"학생",56)}; Arrays.sort(persons); System.out.println("사람배열>>"+Arrays.toString(persons));// class Person cannot be cast to class java.lang.Comparable // (Person is in unnamed module of loader 'app'; // java.lang.Comparable is in module java.base of loader 'bootstrap') }//main}
예제 - 2
import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.Comparator;public class ArraySortTest2 { static class Person implements Comparable<Person> {// static class Person implements Comparator<Person> { String name; int age; String job; int score; public Person() { // TODO Auto-generated constructor stub } public Person(String name, int age, String job, int score) { this.name = name; this.age = age; this.job = job; this.score = score; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", job=" + job + ", score=" + score + "]\n"; } @Override public int compareTo(Person o) { //정렬의 기준을 정의~!! //this(Person)의 속성과 o(Person)의 속성을 비교 //비교방법 this.속성 - o.속성 //결과: 음수, 0, 양수 ==> 음수의 경우 swap을 해줌 ==> 오름차순 정렬 return this.age - o.age; //오름차순정렬 //만약 내림차순 정렬을 하고 싶다!! //1 //return o.age - this.age; //2// return -(this.age - o.age) ; }// @Override// public int compare(Person o1, Person o2) {// return -(o1.age - o2.age); //나이 오름차순 정렬// } } public static void main(String[] args) { //객체 배열 정렬 ArrayList<Person> list = new ArrayList<>(); list.add(new Person("갓길동",11,"학생",95)); list.add(new Person("빛길동",19,"학생",80)); list.add(new Person("남길동",14,"학생",100)); list.add(new Person("여길동",17,"학생",99)); list.add(new Person("킹길동",15,"학생",56)); // Arrays.sort(list);//에러발생: Arrays클래스의 sort메소드를 통해 Collection(List)의 정렬을 할 수 없음~!! Collections.sort(list); //Comparable일 경우// Collections.sort(list,new Person()); //Comparator일 경우 Collections.sort(list, Comparator객체); System.out.println(list); }//main}
예제 - 3
import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.Comparator;public class ArraySortTest3 { static class Person { String name; int age; String job; int score; public Person() { // TODO Auto-generated constructor stub } public Person(String name, int age, String job, int score) { this.name = name; this.age = age; this.job = job; this.score = score; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", job=" + job + ", score=" + score + "]\n"; } }//Person public static void main(String[] args) { //객체 배열 정렬 ArrayList<Person> list = new ArrayList<>(); list.add(new Person("갓길동",11,"학생",95)); list.add(new Person("빛길동",19,"학생",80)); list.add(new Person("남길동",19,"학생",100)); list.add(new Person("여길동",19,"학생",99)); list.add(new Person("킹길동",15,"학생",56)); //나는 특정인터페이스를 상속받지 않는 Person을 사용하고 싶다!! //추가 문제) Person을 age오름차순으로 하되 같은 age의 경우 score내림차순으로 정렬하시오. Collections.sort(list, new Comparator<Person>() {//내부클래스 시작 //implements Comparator의 의미 @Override public int compare(Person o1, Person o2) { if(o1.age == o2.age) return o2.score - o1.score; return o1.age - o2.age; } }//내부클래스 끝 ); System.out.println(list); }//main}
정리
##### <sort정리>1. 기본자료형, String 배열의 Sort ==> Arrays.sort( 기본자료형 배열 )사용##### 2. 객체자료형(예:Person) 배열의 Sort ==> Arrays.sort( 객체자료형 배열 ) ==> ** 반드시 정렬객체에 implements Comparable 사용 ** ==> compareTo메소드 오버라이딩 필요 return this.속성-o.속성; //오름차순 return o.속성-this.속성; 또는 return -(this.속성-o.속성); //내림차순##### 3. List컬렉션을 사용하는 경우 ==> ☆Collections.sort(컬렉션) 사용, ★Collections.sort(컬렉션, Comparator객체) 사용 ==> ☆의 경우, 위의 2번처럼 ** 정렬객체에 implements Comparable **이면 동일하게 사용할 수 있음 ==> compareTo메소드 오버라이딩 필요 return this.속성-o.속성; //오름차순 return o.속성-this.속성; 또는 return -(this.속성-o.속성); //내림차순 ==> ★의 경우 방법1) ** 정렬 객체에 implements Comparator ** 사용 ==> compare메소드 오버라이딩 필요 return o1.속성-o2.속성; //오름차순 return o2.속성-o1.속성; 또는 return -(o1.속성-o2.속성); //내림차순 방법2) 정렬 객체에 implements Comparator 사용 하지 않고 익명의 내부클래스 사용 ==> Collections.sort(컬렉션, new Comparator(){ compare메소드 오버라이딩 });
'코딩테스트' 카테고리의 다른 글
DFS(Depth-First Search) 깊이 우선 탐색 (0) | 2025.05.30 |
---|---|
백준 - 9081 번 단어 맞추기 (0) | 2025.04.12 |
NextPermutation (0) | 2025.04.12 |
CompleteBinaryTree(완전이진탐색) (0) | 2025.04.11 |
백준 - 1158 번 요세푸스 (0) | 2025.04.11 |