-
728x90๋ฐ์ํ
Class Case Exception
import java.util.Arrays;class Burger{String name;int price;Burger(String name, int price){}}public class Test01 {public static void main(String[] args) {Burger[] burgers = new Burger[3];burgers[0] = new Burger("1957",6000);burgers[1] = new Burger("๋๋ธ๋ถ๊ณ ๊ธฐ",7000);burgers[2] = new Burger("ํ์ฐ๋ฒ๊ฑฐ", 8000);Arrays.sort(burgers); //Exception occurs}}์ ์ฝ๋๋ฅผ ์คํ ์ํค๋ฉด ClassCaseException์ด ๋ฐ์ํ๋ค
์ด๋ Arrays.sort์ ๊ธฐ์ค์ ์ธ comparable์ ๋ฒ๊ฑฐ ๊ฐ์ฒด (name,int)๋ฅผ ์ ๋ ฌํ๋ ๊ธฐ์ค์ ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ comparable class๋ฅผ implements ํด์ compareTo ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํด์ค์ผํ๋ค.
๐คฆ๐ปโโ๏ธ CompareTo Method
return values: ์์, 0 , ์์
์์๊ฐ ๋ฆฌํด: ๋ด๊ฐ ๋น๊ต๋์๋ณด๋ค ์์ ์๋ค
0 ๋ฆฌํด: ๋น๊ต ๋์๊ณผ ์๋ฆฌ๋ฅผ ๋ฐ๊พธ์ง ์๊ฒ ๋ค (์ด๋ x)
์์๊ฐ ๋ฆฌํด: ๋ด๊ฐ ๋น๊ต๋์๋ณด๋ค ๋ค์ ์๋คCompareTo๋ฅผ ํ์ฉ
public class Student implements Comparable<Student>{int no, score;public int getNo() {return this.no;}public void setNo(int no) {this.no = no;}public int getScore() {return this.score;}public void setScore(int score) {this.score = score;}@Overridepublic String toString() {return "Student [no=" + no + ", score=" + score + "]";}/* ์์๊ฐ์ด ๋ฆฌํด์ผ ๊ฒฝ์ฐ ๊ธฐ์ค์ ์ด ๋น๊ต๋์์ ์์ ์์น* ์์๊ฐ์ด ๋ฆฌํด์ผ ๊ฒฝ์ฐ ๊ธฐ์ค์ ์ด ๋น๊ต๋์์ ๋ค์ ์์น* 0์ผ ๊ฒฝ์ฐ ์ด๋ ์์*/@Overridepublic int compareTo(Student o) {return this.no - o.no; //์ค๋ฆ์ฐจ์}CompareTo
1. ๋ด ๋ฒํธ(this.no): 7๋ฒ
2. ๋น๊ต ๋์ ๋ฒํธ(o.no): 3๋ฒ //o๋ ํ๋ผ๋ฏธํฐ ์์ ๋ค์ด๊ฐ ๊ฐ์ฒด์
โ this.no - o.no >0. ์์๋๊น ๋ด๊ฐ ๋น๊ต ๋์๋ณด๋ค ๋ค์ ์์โ์ด๋
1. ๋ด๋ฒํธ(this.no):3๋ฒ
2. ๋น๊ต ๋์ ๋ฒํธ(o.no): 7๋ฒ โ this.no - o.no <0 : ์์๋๊น ์์ผ๋ก ์ด๋๐คฆ๐ปโโ๏ธ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ณ ์ถ๋ค๋ฉด return๊ฐ์ o.no - this.no; ๋ก ์ฃผ๋ฉด ๋๋ค
ํ ์คํธ ํด๋ณด๋ฉด,
import java.util.Arrays;public class Test02 {public static void main(String[] args) {Student[] arr = {new Student(2,14),new Student(1,50),new Student(4,35),new Student(3, 90)};System.out.println(Arrays.toString(arr));Arrays.sort(arr);//CompareTo๋ฅผ ์ค๋ฒ๋ผ์ด๋ํด์ ๊ฐ๋ฅSystem.out.println(Arrays.toString(arr));}}Sort ๊ฐ ์๋์ด์๋ ์ถ๋ ฅ๊ฐ:
[Student [no=2, score=14], Student [no=1, score=50], Student [no=4, score=35], Student [no=3, score=90]]
์ค๋ฒ๋ผ์ด๋ฉ๋ Sort๋ฅผ ์ด์ฉํ ์ถ๋ ฅ๊ฐ:
[Student [no=1, score=50], Student [no=2, score=14], Student [no=3, score=90], Student [no=4, score=35]]
Comparable ์ธํฐํ์ด์ค ํ์ฉ
Comparator ์ธํฐํ์ด์ค ๊ตฌํ
private static class StudentComparator implements Comparator <Student>{@Overridepublic int compare(Student o1, Student o2) {return o2.no - o1.no; //๋ด๋ฆผ์ฐจ์}}//์ ์ ์์ผ๋ก ์ค๋ฆ์ฐจ์, ์ ์๊ฐ ๊ฐ์ผ๋ฉด ๋ฒํธ๋ก ๋ด๋ฆผ์ฐจ์์ผ๋ก ๊ธฐ์ค์//ํ๊ฐ์ง ์ด์์ผ๋ก ๋ ๋:private static class StudentComparator2 implements Comparator <Student>{@Overridepublic int compare(Student o1, Student o2) {if(o2.score==o1.score) return o2.no-o1.no;//๋ด๋ฆผ์ฐจ์else return o1.score - o2.score ; //์ค๋ฆ์ฐจ์}}๋ฉ์ธ ๋ฉ์๋:
public static void main(String[] args) {Student[] arr = {new Student(2,14),new Student(1,50),new Student(4,35),new Student(5,50), //์ ์๊ฐ ๊ฐ์ ๋new Student(3, 90)};// Student Comparator๊ฐ ์ ๋ ฌ์ ๊ธฐ์ค์ด ๋๋ค// Arrays.sort(arr, new StudentComparator1());// System.out.println(Arrays.toString(arr));Arrays.sort(arr, new StudentComparator2());System.out.println(Arrays.toString(arr));}์ต๋ช ํด๋์ค ์ด์ฉ
private ํด๋์ค๊ฐ ์๋ ์ต๋ช ํด๋์ค๋ก ๋ง๋ค๋์๋ new ํค์๋ ๋ค์์๋ ์์ ํด๋์ค๊ฐ ์์ผํ๋ค
Arrays.sort(arr, new Comparator<Student>(){@Overridepublic int compare(Student o1, Student o2){return o1.score-o2.score;}});System.out.println(Arrays.toString(arr));๋๋ค์ ์ด์ฉ
๐คฆ๐ปโโ๏ธ @FunctionalInterface: ์ธํฐํ์ด์ค ์์ ๋ฉ์๋๊ฐ ํ๋๋ง ์๋ ๊ฒฝ์ฐ โ ๋๋ค์ ์ฐ๊ด์ง์ด์ ์๊ฐํ์
- ๋๋ค ํด๋์ค์์ ์ธํฐํ์ด์ค์ ์ ์ธ๋ฌธ ๋นผ๊ณ (ํ๋๋ฐ์ ์์ด์) ๋ฉ์๋ ์ด๋ฆ์ ์ธ ํ์๊ฐ ์๋ค.
- ๋ฐํ ํ์ ์ญ์ ์ธํฐํ์ด์ค๊ฐ ์๊ธฐ ๋๋ฌธ์ ํ์ ์๋ค.
- ๋ํ, Student ์ญ์ ์ถ๋ก ์ด ๊ฐ๋ฅํ๋ค (arr๋ฐฐ์ด์ ์ด๋ฏธ Student ๊ฐ ๋ค์ด๊ฐ ์์ด์ โ Student ํ์ ๋ ๋น ์ ธ๋ ๋๋ค)
- ํ๋ฌธ์ฅ ์ผ ๋, ์ค๊ดํธ ์๋ต ๊ฐ๋ฅํ์ง๋ง, ๋ฆฌํด์ ๋ฐ๋์ ์ ๊ฑฐํด์ผํจ
Arrays.sort(arr, (o1, o1)-> o1.score - o2.score);System.out.println(Arrays.toString(arr));728x90๋ฐ์ํ'๐ STUDY > JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ถ์ํ (0) 2022.05.17 ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ (1) 2022.05.17 JAVA Basics (0) 2022.05.12 Variables (0) 2021.07.15 ๋ค์ง (0) 2021.07.15