일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 주식시황
- 국제유가
- android
- 네마녀의날
- 화승엔터프라이즈
- dataframe
- 무역전쟁
- e-mailwriting
- Intent
- 어학·외국어
- toeice-mail
- 영어메일쓰기
- englishwriting
- 셀트리온
- 사드보복완화
- 영어메일
- 안드로이드
- LG전자
- 나스닥
- 트럼프
- Java
- 다우
- 다우산업
- 금리인상
- 시황
- ruby
- 파이썬
- S&P
- Python
- 토익이메일
- Today
- Total
Developer MJ Story
[Java/Arrays] java Arrays class를 활용한 object 정렬(sorting) 본문
이번 포스티에서는 sorting에 대해 알아보겠습니다.
Sorting 방법은 여러 가지가 있습니다. 그 중에서 가장 선호 하는 방식을 사용하면 됩니다.
저는 구현이 가장 쉬운 binary search를 선호 합니다.
저는 지금까지 직접 binary search를 구현해서 사용했습니다.
그래서 그때그때 코드 내용이 수정되고 바뀌고 그랬죠.
뭐 그래도 동작은 잘되니까…ㅋ
그런데, 최근에 알게 된 사실…..java에서 API로 sorting을 제공한다는 사실…..
저만 몰랐던 걸까요?? ㅠ.ㅠ
아무튼 그 매우 간단한 사용법에 대해 설명해 드리겠습니다.
Arrays.sort(arr);
이게 끝입니다..ㅋ
정말 쉽습니다. 그런데 여기서 끝이면 포스팅을 따로 하지 않겠죠.
제목을 보셨으면 아시겠지만, Object sorting입니다.
java에서는 C의 구조체 대신 class 그러니까 object로 만들어서 관리를 하죠.
오늘 알아볼 내용이 Object의 속성 단위로 sorting 하는 것입니다.
먼저 Info 라는 날짜와 숫자를 저장할 수 있는 class를 만듦니다.
Sample입니다.
public class Info implements Comparable<Info>{
private String name = "";
private long num1 = 0;
private long num2 = 0;
public Info(String number, long agency, long foreign){
name = number;
num1 = agency;
num2 = foreign;
}
public String getNumber(){
return name;
}
public long getAgencyIncom(){
return num1;
}
public long getForeignIncom(){
return num2;
}
public boolean equals(Object other){
return (name.equals(((Info)other).getNumber()));
}
public String toString(){
return name + ", " + num1 + ", " + num2;
}
@Override
public int compareTo(Info o) {
// TODO Auto-generated method stub
return this.name.compareTo(o.getNumber());
}
}
먼저 name 기준으로 sorting하기 위해 info class를 Comparable<Info>로 implements 합니다.
그리고 마지막에 있는 compareTo 함수를 만들어 주면 됩니다.
아래와 같이 sample을 만들고
Info[] arr = new Info[]{
new Info("2014.07.07", -100, 100),
new Info("2014.07.04", 10, -100),
new Info("2014.04.07", 1000, 200),
new Info("2014.02.07", -200, 4000),
new Info("2014.01.07", 400, 4440),
new Info("2014.07.03", -40, 100),
new Info("2014.07.04", 90, 900)
};
Arrays.sort(arr);
을 호출하고,
System.out.println(Arrays.toString(arr))
Console에 확인할 수 있습니다.
그리고 Info의 두 번째, 세 번째 변수로 sorting하는 방법은 Comparator를 이용하는 것입니다.
아래 sample 코드를 sorting할 class의 inner class로 선언해 줍니다.
private class num1Comparator implements Comparator<Info>{
@Override
public int compare(Info o1, Info o2) {
long agency1 = o1.getAgencyIncom();
long agency2 = o2.getAgencyIncom();
return agency1 > agency2 ? -1 :(agency1 == agency2 ? 0 : 1);
}
}
private class num2Comparator implements Comparator<Info>{
@Override
public int compare(Info o1, Info o2) {
long foreign1 = o1.getForeignIncom();
long foreign2 = o2.getForeignIncom();
return foreign1 > foreign2 ? -1 :(foreign1 == foreign2 ? 0 : 1);
}
}
꼭 sorting을 호출한 class의 inner class로 선언해 줘야 Arrays.sort 가능합니다.
사용법도 간단합니다. srot할 때 두 번째 인자로 comparator 객체를 선언하면 됩니다.
Arrays.sort(arr, new num1Comparator());
System.out.println(Arrays.toString(arr));
Arrays.sort(arr, new num2Comparator());
System.out.println(Arrays.toString(arr));
알고 보니 정말 쉽죠?ㅋ
'Software > Java' 카테고리의 다른 글
[Java/Thread] Java Thread 바로 종료 시키기 – interrupt() (0) | 2014.07.22 |
---|---|
[Java/Excel POI] POI apache cell 서식 적용 하는 방법 (1) | 2014.07.16 |
[java/jsoup] jsoup Connect time out error 해결 (0) | 2014.07.05 |
[java/jxl] 자바에서 excel파일 write 하기 (1) | 2014.06.12 |
[java/jxl] 자바에서 excel 파일 read 하기 (0) | 2014.06.12 |