Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 동적 버튼 생성
- MAP
- 자바
- Comparable
- oclick 동적
- 변수선언
- iBatis
- 쓰레드
- comparator
- 연산자
- IBatis 게시판
- 동적 버튼 onclick
- 계산기
- io
- 조건문
- 객체지향
- Java
- ListSort
- 고급자바
- 변수초기화
- I/O
- 동적 문자열
- enum
- Thread
- 동적 데이터
- 변수
- 객체
- 코딩
- IBatis CRUD
- 기초
Archives
- Today
- Total
Jun's Blog
[Java] ListSort (Comparable & Comparator) 본문
High Java/Collection FrameWork
[Java] ListSort (Comparable & Comparator)
Fizzyelf 2020. 9. 26. 15:36정렬과 관련된 Interface는 Comparable과 Comparator가 존재한다.
=> 보통 객체 자체에 정렬기능을 넣기 위해서는 Comparable을 구현하고,
정렬 기준을 별도로 구현하고 싶을 때는 Comparator를 구현하여 사용한다.
=> Comparable에서는 CompareTo() 메서드를 구현하고,
Comparator에서는 Compare() 메서드를 구현한다.
package kr.or.ddit.basic;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class T02_ListSortTest {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("일지매");
list.add("홍길동");
list.add("성춘향");
list.add("변학도");
list.add("이순신");
System.out.println("정렬 전 : " + list);
// 정렬은 Collections.sort() 메서드를 이용하여 정렬한다.
// 기본적으로 "오름차순 정렬"을 수행한다.
// 정렬방식을 변경하려면 정렬방식을 결정하는 객체를 만들어서
// Collections.sort() 메서드에 변수로 넘겨주면 된다.
Collections.sort(list);
System.out.println("정렬 후 : " + list);
Collections.shuffle(list); //데이터를 섞어 준다.
System.out.println("자료 섞기 후 : " + list);
//정렬방식을 결정하는 객체(정렬자)를 이용하여 정렬하기
Collections.sort(list, new Desc());
System.out.println("정렬 후 : " + list);
}
}
/**
* 정렬방식을 결정하는 class는 Comparator라는 인터페이스를 구현해야 한다.
* 이 Comparator 인터페이스의 compare()라는 메서드를 재정의 하여 구현하면 된다.
*/
class Desc implements Comparator<String> {
/**
* compare() 메서드의 변환값을 결정하는 방법
* => 이 메서드가 양수를 반환하면 두 값의 순서가 바뀐다.(오름차순이 기본이다)
*
* - 오름차순 정렬일 경우..
* => 앞의 값이 크면 양수, 같으면 0, 앞의 값이 작으면 음수를 반환하도록 한다.
*
* - String 객체에는 정렬을 위해서 compareTo()메서드가 구현되어 있는데
* 이 메서드의 반환값은 오름차순에 맞게 변환되도록 구현되어 있다.
* (Wrapper 클래서와 Date, File 클래스에도 구현되어 있다.)
*/
@Override
public int compare(String str1, String str2) {
return str1.compareTo(str2) * 1; // 1이면 오름차순, -1이면 내림차순
}
}
package kr.or.ddit.basic;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class T03_ListSortTest {
public static void main(String[] args) {
List<Member> memList = new ArrayList<Member>();
memList.add(new Member(1, "홍길동", "010-1111-1111"));
memList.add(new Member(5, "변학도", "010-2222-2222"));
memList.add(new Member(9, "성춘향", "010-3333-3333"));
memList.add(new Member(3, "이순신", "010-4444-4444"));
memList.add(new Member(6, "강감찬", "010-5555-5555"));
memList.add(new Member(2, "일지매", "010-6666-6666"));
System.out.println("정렬 전 : ");
for(Member mem : memList) {
System.out.println(mem);
}
System.out.println("----------------------------------");
Collections.sort(memList); // 정렬하기
System.out.println("이름의 오름차순으로 정렬 후 : ");
for(Member mem : memList) {
System.out.println(mem);
}
System.out.println("----------------------------------");
// 외부 정렬 기준을 이용한 정렬하기
Collections.sort(memList, new SortNumDesc());
System.out.println("번호의 오름차순으로 정렬 후 : ");
for(Member mem : memList) {
System.out.println(mem);
}
System.out.println("----------------------------------");
}
}
/**
* 정렬 기준의 외부 선언을 위해서는 Comparator 인스터페이스를 구현하면 된다.
* (Member 객체의 번호(num)의 내림차순으로 정렬하기)
*
*/
class SortNumDesc implements Comparator<Member> {
@Override
public int compare(Member mem1, Member mem2) {
// if(mem1.getNum() > mem2.getNum()) {
// return -1;
// } else if(mem1.getNum() == mem2.getNum()) {
// return 0;
// } else {
// return 1;
// }
// Wrapper 클래스에서 제공하는 메서드를 이용하는 방법1
/*
* return Integer.compare(mem1.getNum(), mem2.getNum()) * -1;
*/
// Wrapper 클래스에서 제공하는 메서드를 이용하는 방법2
return new Integer(mem1.getNum()).compareTo(mem2.getNum()) * -1;
}
}
/**
* 회원의 정보를 저장할 클래스
* (회원 이름을 기준으로 오름차순 정렬이 될 수 있는 클래스 만들기)
*/
class Member implements Comparable<Member> {
private int num; // 번호
private String name; // 이름
private String tel; // 전화번호
/**
* 이름 기준으로 오름차순 정렬이 되도록 설정한다
*/
@Override
public int compareTo(Member mem) {
return getName().compareTo(mem.getName());
}
public Member(int num, String name, String tel) {
super();
this.num = num;
this.name = name;
this.tel = tel;
}
@Override
public String toString() {
return "Member [num=" + num + ", name=" + name + ", tel=" + tel + "]";
}
public void setNum(int num) {
this.num = num;
}
public void setName(String name) {
this.name = name;
}
public void setTel(String tel) {
this.tel = tel;
}
public int getNum() {
return num;
}
public String getName() {
return name;
}
public String getTel() {
return tel;
}
}
'High Java > Collection FrameWork' 카테고리의 다른 글
[Java] Map을 활용한 간단 예제 (0) | 2020.10.08 |
---|---|
[Java] Set을 이용한 야구 게임 프로그램 (0) | 2020.10.08 |
[Java] Set, Iterator 추가 삭제하기 (0) | 2020.09.29 |
[Java] ListSort - 학생 관리 프로그램 (0) | 2020.09.26 |
[Java] Stack & Queue (0) | 2020.09.26 |
Comments