알고리즘/이론과 문법

객체(Object) 정렬

lipnus 2018. 9. 17. 19:04
반응형

방법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