Listμ μ λ ¬(Sort) - interface : Comparable, Comparator (3)
π‘ μ¬μ©μ 컀μ€ν ν΄λμ€ (VO)κ°μ²΄ μμ±
νμ ν΄λμ€ (νλ², μ΄λ¦, κ΅μ΄μ μ, μνμ μ, μμ΄μ μ, μ΄μ , μμ°¨)
ν΄λμ€ κ°μ²΄ μμ± ν μλ£ μΆλ ₯
- μμ±μ μμ±
- getter setter μμ±
- μμ°¨λ₯Ό ꡬν λ©μλ μμ±
- toString μ€λ²λΌμ΄λ
package baekjoonProject;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Student> students = new ArrayList<Student>();
students.add(new Student("201263346", "νκΈΈλ", 75,65,52));
students.add(new Student("201263344", "λ³νλ", 70,60,20));
students.add(new Student("201263343", "κ°κ°μ°¬", 75,65,52));
students.add(new Student("201263341", "μ±μΆν₯", 10,95,83));
students.add(new Student("201263342", "μ΄μμ ", 75,65,52));
students.add(new Student("201263345", "μΌμ§λ§€", 75,65,52));
Student.setRanked(students);
System.out.println("νμ λͺ©λ‘ μ λ ¬ μ ");
for(Student stu : students) {
System.out.println(stu);
}
}
}
class Student {
private String stuNum;
private String stuName;
private int kor;
private int eng;
private int mat;
private int subSum;
private int stuRank;
Student(){
}
public Student(String stuNum, String stuName, int kor, int eng, int mat) {
// super(); μμ±μλ Objectλ₯Ό νΈμΆν΄μΌ νλ€. νμ§λ§ μ΄κ²μ΄ μμ΄λ μ»΄νμΌλ¬κ° μμμ μμ±νμ¬ νΈμΆνλ€.
this.stuNum = stuNum;
this.stuName = stuName;
this.kor = kor;
this.eng = eng;
this.mat = mat;
this.subSum = kor + eng + mat;
this.stuRank = 1;
}
public String getStuNum() {
return stuNum;
}
public void setStuNum(String stuNum) {
this.stuNum = stuNum;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public int getKor() {
return kor;
}
public void setKor(int kor) {
this.kor = kor;
}
public int getEng() {
return eng;
}
public void setEng(int eng) {
this.eng = eng;
}
public int getMat() {
return mat;
}
public void setMat(int mat) {
this.mat = mat;
}
public int getSubSum() {
return subSum;
}
public void setSubSum(int subSum) {
this.subSum = subSum;
}
public int getStuRank() {
return stuRank;
}
public void setStuRank(int stuRank) {
this.stuRank = stuRank;
}
public static void setRanked(List<Student> students) {
for(Student st1 : students) {
int rank = st1.stuRank;
for(Student st2 : students) {
if(st1.getSubSum() < st2.getSubSum()) {
rank++;
}
}
st1.setStuRank(rank);
}
}
@Override
public String toString() {
return "Student [stuNum=" + stuNum + ", stuName=" + stuName + ", kor=" + kor + ", eng=" + eng + ", mat=" + mat
+ ", subSum=" + subSum + ", stuRank=" + stuRank + "]";
}
}
π‘ νμ νλ² κΈ°μ€ μ€λ¦μ°¨μ μ λ ¬ μ€μ (Comparable - compareTo() λ©μλ ꡬν)
- μ μ©ν κ°μ²΄ implements
- compareTo() λ©μλ ꡬν
- νλ² κΈ°μ€ μ€λ¦μ°¨μμ λ ¬ λ¦¬ν΄ μ λ ₯
package baekjoonProject;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Student> students = new ArrayList<Student>();
students.add(new Student("201263346", "νκΈΈλ", 75,65,52));
students.add(new Student("201263344", "λ³νλ", 70,60,20));
students.add(new Student("201263343", "κ°κ°μ°¬", 75,65,52));
students.add(new Student("201263341", "μ±μΆν₯", 10,95,83));
students.add(new Student("201263342", "μ΄μμ ", 75,65,52));
students.add(new Student("201263345", "μΌμ§λ§€", 75,65,52));
Student.setRanked(students);
System.out.println("νμ λͺ©λ‘ μ λ ¬ μ ");
for(Student stu : students) {
System.out.println(stu);
}
System.out.println("β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β ");
System.out.println("νλ² κΈ°μ€ μ€λ¦μ°¨μ μ λ ¬ ν");
Collections.sort(students);
for(Student stu : students) {
System.out.println(stu);
}
}
}
class Student implements Comparable<Student>{
private String stuNum;
private String stuName;
private int kor;
private int eng;
private int mat;
private int subSum;
private int stuRank;
Student(){
}
public Student(String stuNum, String stuName, int kor, int eng, int mat) {
// super(); μμ±μλ Objectλ₯Ό νΈμΆν΄μΌ νλ€. νμ§λ§ μ΄κ²μ΄ μμ΄λ μ»΄νμΌλ¬κ° μμμ μμ±νμ¬ νΈμΆνλ€.
this.stuNum = stuNum;
this.stuName = stuName;
this.kor = kor;
this.eng = eng;
this.mat = mat;
this.subSum = kor + eng + mat;
this.stuRank = 1;
}
public String getStuNum() {
return stuNum;
}
public void setStuNum(String stuNum) {
this.stuNum = stuNum;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public int getKor() {
return kor;
}
public void setKor(int kor) {
this.kor = kor;
}
public int getEng() {
return eng;
}
public void setEng(int eng) {
this.eng = eng;
}
public int getMat() {
return mat;
}
public void setMat(int mat) {
this.mat = mat;
}
public int getSubSum() {
return subSum;
}
public void setSubSum(int subSum) {
this.subSum = subSum;
}
public int getStuRank() {
return stuRank;
}
public void setStuRank(int stuRank) {
this.stuRank = stuRank;
}
public static void setRanked(List<Student> students) {
for(Student st1 : students) {
int rank = st1.stuRank;
for(Student st2 : students) {
if(st1.getSubSum() < st2.getSubSum()) {
rank++;
}
}
st1.setStuRank(rank);
}
}
@Override
public String toString() {
return "Student [stuNum=" + stuNum + ", stuName=" + stuName + ", kor=" + kor + ", eng=" + eng + ", mat=" + mat
+ ", subSum=" + subSum + ", stuRank=" + stuRank + "]";
}
@Override
public int compareTo(Student stu) {
return this.getStuNum().compareTo(stu.getStuNum());
}
}
π‘ νμ μ΄μ κΈ°μ€ λ΄λ¦Όμ°¨μ μΆκ° μ λ ¬ μ€μ (Compator - compare() λ©μλ ꡬν)
- μ΄μ μ΄ κ°μ κ²½μ° νλ²κΈ°μ€ λ΄λ¦Όμ°¨μ μ λ ¬ κ·Έκ²μλλ©΄ μ΄μ λ΄λ¦Όμ°¨μ μ λ ¬
- μλ‘μ΄ κ°μ²΄ μμ±
- 쑰건 μ€μ (κ°μκ²½μ°) μλ μ°Έκ³
λ΄λ¦Όμ°¨μ : -1 (μμ)
μ€λ¦μ°¨μ : 1 (μμ)
λ³νμμ : 0
if(mem1.getNum() > mem2.getNum()) {
return -1;//κ·μΉμ (μμ)
}else if(mem1.getNum() == mem2.getNum()) {
return 0;//κ·μΉμ ( κ°μ)
}else {
return 1;//κ·μΉμ (μμ)
}
π μΆκ° μ λ ¬ κ·μΉμ λν ν΄λμ€ μμ±
String μλ μ λ ¬ λ©μλ compareTo κ° κ΅¬νλμ΄ μμ.
Integer μλ μ λ ¬ λ©μλ compare κ° κ΅¬νλμ΄ μμ.
λλ€ λ΄λ¦Όμ°¨μμ΄λ―λ‘ κ²°κ³Ό λ€μ -1μ κ³±ν¨. μΈμκ°μ λ©μλμ λ§κ² λ겨μ€.
class SortSubSum implements Comparator<Student>{
@Override
public int compare(Student stu1, Student stu2) {
if(stu1.getSubSum() == stu2.getSubSum()) {
return stu1.getStuNum().compareTo(stu2.getStuName()) * -1;
}else {
return Integer.compare(stu1.getSubSum(), stu2.getSubSum()) * -1;
}
}
}
πκ²°κ³Ό νμΈ
package baekjoonProject;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Student> students = new ArrayList<Student>();
students.add(new Student("201263346", "νκΈΈλ", 75,65,52));
students.add(new Student("201263344", "λ³νλ", 70,60,20));
students.add(new Student("201263343", "κ°κ°μ°¬", 75,65,52));
students.add(new Student("201263341", "μ±μΆν₯", 10,95,83));
students.add(new Student("201263342", "μ΄μμ ", 75,65,52));
students.add(new Student("201263345", "μΌμ§λ§€", 75,65,52));
Student.setRanked(students);
System.out.println("νμ λͺ©λ‘ μ λ ¬ μ ");
for(Student stu : students) {
System.out.println(stu);
}
System.out.println("β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β ");
System.out.println("νλ² κΈ°μ€ μ€λ¦μ°¨μ μ λ ¬ ν");
Collections.sort(students);
for(Student stu : students) {
System.out.println(stu);
}
System.out.println("β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β ");
System.out.println("μ΄μ λ΄λ¦Όμ°¨μ, λ¨ μ΄μ μ΄ κ°μ λ μ΄μ λ΄λ¦Όμ°¨μ");
Collections.sort(students, new SortSubSum());
for(Student stu : students) {
System.out.println(stu);
}
}
}
class Student implements Comparable<Student>{
private String stuNum;
private String stuName;
private int kor;
private int eng;
private int mat;
private int subSum;
private int stuRank;
Student(){
}
public Student(String stuNum, String stuName, int kor, int eng, int mat) {
// super(); μμ±μλ Objectλ₯Ό νΈμΆν΄μΌ νλ€. νμ§λ§ μ΄κ²μ΄ μμ΄λ μ»΄νμΌλ¬κ° μμμ μμ±νμ¬ νΈμΆνλ€.
this.stuNum = stuNum;
this.stuName = stuName;
this.kor = kor;
this.eng = eng;
this.mat = mat;
this.subSum = kor + eng + mat;
this.stuRank = 1;
}
public String getStuNum() {
return stuNum;
}
public void setStuNum(String stuNum) {
this.stuNum = stuNum;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public int getKor() {
return kor;
}
public void setKor(int kor) {
this.kor = kor;
}
public int getEng() {
return eng;
}
public void setEng(int eng) {
this.eng = eng;
}
public int getMat() {
return mat;
}
public void setMat(int mat) {
this.mat = mat;
}
public int getSubSum() {
return subSum;
}
public void setSubSum(int subSum) {
this.subSum = subSum;
}
public int getStuRank() {
return stuRank;
}
public void setStuRank(int stuRank) {
this.stuRank = stuRank;
}
public static void setRanked(List<Student> students) {
for(Student st1 : students) {
int rank = st1.stuRank;
for(Student st2 : students) {
if(st1.getSubSum() < st2.getSubSum()) {
rank++;
}
}
st1.setStuRank(rank);
}
}
@Override
public String toString() {
return "Student [stuNum=" + stuNum + ", stuName=" + stuName + ", kor=" + kor + ", eng=" + eng + ", mat=" + mat
+ ", subSum=" + subSum + ", stuRank=" + stuRank + "]";
}
@Override
public int compareTo(Student stu) {
return this.getStuNum().compareTo(stu.getStuNum());
}
}
class SortSubSum implements Comparator<Student>{
@Override
public int compare(Student stu1, Student stu2) {
if(stu1.getSubSum() == stu2.getSubSum()) {
return stu1.getStuNum().compareTo(stu2.getStuName()) * -1;
}else {
return Integer.compare(stu1.getSubSum(), stu2.getSubSum()) * -1;
}
}
}