Comparable<T> μΈν°νμ΄μ€?
- ν΄λμ€ μ λ ¬μ ꡬνν μ μλλ‘ ν΄μ£Όλ μΈν°νμ΄μ€μ΄λ©°, TreeSet 컬λ μ μμ μ¬μ©ν΄μΌ ν©λλ€.
- μκΈ° μμ κ³Ό μ λ¬λ°μ λ§€κ°λ³μλ₯Ό λΉκ΅νλ μΈν°νμ΄μ€
- CompareTo() λ©μλλ₯Ό μ€λ²λΌμ΄λ© ν΄μ μ λ ¬μ‘°κ±΄μ ꡬνν΄μΌ ν©λλ€.
compareTo()
λ°ν κ°
- μμ μ μ : μ λ ¬ 쑰건
- μμ μ μ : ν μν μ μ§
- 0 : λ κ°μ²΄κ° λμΌνλ€λ μλ―Έλ‘ Set νΉμ±μ μν΄ ν΄λΉ κ°μ²΄κ° νμ λμ§ μμ΅λλ€. λ°λΌμ, μ΄ κ²½μ°μλ νμ 쑰건μ μΆκ°ν΄μ€μΌ ν©λλ€.
πΆμμ 1
public class CarSort implements Comparable<CarSort> {
String modelName;
int modelYear;
String color;
public CarSort(String modelName, int modelYear, String color) {
this.modelName = modelName;
this.modelYear = modelYear;
this.color = color;
}
@Override
public int compareTo(CarSort o) {
if(this.modelYear == o.modelYear) {
return this.modelName.compareTo(o.modelName);
}
return this.modelYear - o.modelYear; // μμ΄ λ€λ³΄λ€ ν¬λ©΄ μ λ ¬ (μ€λ¦μ°¨μ)
}
}
compareTo()
* λ¬Έμμ΄μΌ κ²½μ°, μμ€ν€μ½λλ‘ λΉκ΅ν¨
* μ λ ¬μ‘°κ±΄λ§ λ£μ΄μ£Όλ©΄ μ€μ μ λ ¬μ λ΄λΆμμ μ²λ¦¬ν΄μ€(quick sort)
import java.util.TreeSet;
public class Main {
public static void main(String[] args) {
TreeSet<CarSort> ts = new TreeSet<>();
ts.add(new CarSort("ν
μ¬λΌ", 2023, "Red"));
ts.add(new CarSort("μ½λ", 2019, "White"));
ts.add(new CarSort("EV6", 2021, "White"));
ts.add(new CarSort("ν°λ³Όλ¦¬", 2021, "Blue"));
for(CarSort e : ts) {
System.out.println("λͺ¨λΈλͺ
: " + e.modelName + " / μ°μ : " + e.modelYear + " / μμ : " + e.color);
}
}
}
λͺ¨λΈλͺ
: μ½λ / μ°μ : 2019 / μμ : White
λͺ¨λΈλͺ
: EV6 / μ°μ : 2021 / μμ : White
λͺ¨λΈλͺ
: ν°λ³Όλ¦¬ / μ°μ : 2021 / μμ : Blue
λͺ¨λΈλͺ
: ν
μ¬λΌ / μ°μ : 2023 / μμ : Red
Comparator<T> μΈν°νμ΄μ€?
- μμ ν΄λμ€ μ λ ¬μ ꡬνν μ μλλ‘ ν΄μ£Όλ μΈν°νμ΄μ€μ΄λ©°, TreeSet 컬λ μ μμ μ¬μ©ν΄μΌ ν©λλ€.
- λ§€κ°λ³μμμ μ λ¬λ°μ 2κ°μ κ°μ²΄λ₯Ό λΉκ΅νλ μΈν°νμ΄μ€
- Compare() λ©μλλ₯Ό μ€λ²λΌμ΄λ© ν΄μ μ λ ¬μ‘°κ±΄μ ꡬνν΄μΌ ν©λλ€.
compare()
λ°ν κ°
- μμ μ μ : μ λ ¬ 쑰건
- μμ μ μ : ν μν μ μ§
- 0 : λ κ°μ²΄κ° λμΌνλ€λ μλ―Έλ‘ Set νΉμ±μ μν΄ ν΄λΉ κ°μ²΄κ° νμ λμ§ μμ΅λλ€. λ°λΌμ, μ΄ κ²½μ°μλ νμ 쑰건μ μΆκ°ν΄μ€μΌ ν©λλ€.
public class Fruit {
String name;
int price;
public Fruit(String name, int price) {
this.name = name;
this.price = price;
}
}
import java.util.Comparator;
public class DescendComp implements Comparator<Fruit> {
@Override
public int compare(Fruit o1, Fruit o2) {
if(o1.price == o2.price) {
return o1.name.compareTo(o2.name);
}
return o2.price - o1.price; // ν° κ° λΆν° μμ κ° μμλ‘ μ λ ¬ (λ΄λ¦Όμ°¨μ)
}
@Override
public Comparator<Fruit> reversed() {
return Comparator.super.reversed();
}
}
import java.util.TreeSet;
public class Main {
public static void main(String[] args) {
TreeSet<Fruit> ts = new TreeSet<>(new DescendComp());
ts.add(new Fruit("ν¬λ", 5500));
ts.add(new Fruit("μ¬κ³Ό", 12000));
ts.add(new Fruit("λΈκΈ°", 16000));
ts.add(new Fruit("λ°λλ", 5500));
for(Fruit e : ts) {
System.out.println(e.name + " / " + e.price);
}
}
}
TreeSet<Fruit> ts = new TreeSet<>(new DescendComp());
κ°μ²΄ μμ±μ Comparator μ λ ¬ 쑰건μ λ£μ΄μ£Όλ μ΄μ λ?
Comparator provided at set creation time, depending on which constructor is used.
- μΆμ² : Oracle Java SE 11 & JDK 11
πΈμ€μ΅μμ βοΈ
λ¬Έμ : λ¨Όμ νμμ μλ₯Ό μ λ ₯ λ°λλ€. νμμ μ λ§νΌ μ΄λ¦, μ±μ , νλ²μ μ λ ₯λ°μ νμμ μ±μ μ΄ λμ μμΌλ‘ κ²°κ³Όλ₯Ό νμνκ³ , μ±μ μ΄ κ°μΌλ©΄ νλ² μμΌλ‘ μ λ ¬νλ νλ‘κ·Έλ¨μ μμ±νλΌ. (μΆλ ₯μ λ±μλ νμλλλ‘)
μ λ ₯ μμ :
νμ μ : 3
μλ‘λ‘ 54 202301
κΉμ λ 88 202303
μ΅λ‘λ 72 202302
μΆλ ₯ μμ:
====== νμ μ±μ μΆλ ₯ ======
------------------------------------------
μμ°¨ μ΄λ¦ μ±μ νλ²
1 κΉμ λ 88 202303
2 μ΅λ‘λ 72 202302
3 μλ‘λ‘ 54 202301
------------------------------------------
public class Student implements Comparable<Student> {
String name;
int score;
String studentNum;
public Student(String name, int score, String studentNum) {
this.name = name;
this.score = score;
this.studentNum = studentNum;
}
@Override
public int compareTo(Student o) {
if(this.score == o.score) {
return this.studentNum.compareTo(o.studentNum);
}
return o.score - this.score;
}
}
import java.util.Scanner;
import java.util.TreeSet;
public class Main {
public static void main(String[] args) {
TreeSet<Student> ts = new TreeSet<>();
Scanner sc = new Scanner(System.in);
System.out.print("νμ μ : ");
int num = sc.nextInt();
for (int i = 0; i < num; i++) {
String name = sc.next();
int score = sc.nextInt();
String studentNum = sc.next();
ts.add(new Student(name, score, studentNum));
}
System.out.println(" < νμ μ±μ μΆλ ₯ > ");
System.out.println("---------------------------");
System.out.println("μμ°¨ μ΄λ¦ μ±μ νλ²");
System.out.println("---------------------------");
int grade = 0;
for (Student e : ts) {
grade++;
System.out.println(" " + grade + " " + e.name + " " + e.score + " " + e.studentNum);
}
}
}