방법1. Comparable 인터페이스 구현
package com.company;
import java.util.Arrays;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
People[] people = new People[5];
people[0]=new People("할배", 50);
people[1]=new People("민경", 25);
people[2]=new People("초딩", 11);
people[3]=new People("아재", 40);
people[4]=new People("용수", 25);
//정렬
Arrays.sort(people);
for(People p:people){
System.out.println(p.name + "/ " + p.age);
}
System.out.println("===============");
//내림차순 정렬(클래스의 compareTo 메소드를 수정해도 됨)
Arrays.sort(people, Collections.reverseOrder());
for(People p:people){
System.out.println(p.name + "/ " + p.age);
}
}
static class People implements Comparable<People>{
String name;
int age;
public People(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int compareTo(People p) {
// 내림차순(>) , 오름차순(<)
if (this.age < p.age) return -1;
else if(this.age == p.age) return 0;
else return 1;
}
}
}
compareTo는
현재값이 들어온 값보다 작으면 -1 (하나만 외우자)
현재값이 들어온 값이랑 같으면 0
현재값이 들어온 값보다 크면 1
을 리턴한다
[결과값]
초딩/ 11
민경/ 25
용수/ 25
아재/ 40
할배/ 50
=======
할배/ 50
아재/ 40
민경/ 25
용수/ 25
초딩/ 11
[방법2]. Comprator 구현
package com.company;
import java.util.*;
public class Main {
public static void main(String[] args) {
List<People> list = new ArrayList<>();
list.add(new People("할배", 50));
list.add(new People("민경", 25));
list.add(new People("초딩", 11));
list.add(new People("아재", 40));
list.add(new People("용수", 25));
Collections.sort(list, new Comparator<People>() {
@Override
public int compare(People p1, People p2) {
if ( p1.age < p2.age ) return -1;
else if ( p1.age==p2.age ) return 0;
else return 1;
}
});
for(People p:list){
System.out.println(p.name + "/ " + p.age);
}
}
static class People{
String name;
int age;
public People(String name, int age) {
this.name = name;
this.age = age;
}
}
}
위에는 배열로 만들었고 Arrays.sort를 사용했다.
아래는 리스트를 이용했고 Collection.sort를 사용했다.
Collection.sort는 두번째 인자로 Comparator 인터페이스를 받을 수 있다,
Comparator 인터페이스의 compare 메소드를 오버라이드한다.
[결과값]
초딩/ 11
민경/ 25
용수/ 25
아재/ 40
할배/ 50
두번째 인자로 Comparator인터페이스를 넣는 부분은 람다식을 이용해서 표현할 수 있다. (1.7이상의 버전에서만 사용가능)
Collections.sort(list, new Comparator<People>() {
@Override
public int compare(People p1, People p2) {
if ( p1.age < p2.age ) return -1;
else if ( p1.age==p2.age ) return 0;
else return 1;
}
});
Collections.sort(list, (p1, p2) -> {
if ( p1.age < p2.age ) return -1;
else if ( p1.age==p2.age ) return 0;
else return 1;
});
'알고리즘 > 이론과 문법' 카테고리의 다른 글
크루스칼 다익스트라 알고리즘 차이 (0) | 2019.01.19 |
---|---|
인덱스 트리 (0) | 2019.01.17 |
String, StringBuffer, StringBuilder (0) | 2018.12.23 |
BFS level 구하기 (0) | 2018.08.20 |
Huffman Decoding 코드분석 (0) | 2018.07.13 |