public class ListSortTest02 {
public static void main(String[] args) {
ArrayList<Member> memList = new ArrayList<>();
memList.add(new Member(1,"홍길동","010-1111-1111"));
memList.add(new Member(5,"이순신","010-2222-1111"));
memList.add(new Member(9,"성춘향","010-3333-1111"));
memList.add(new Member(3,"김충신","010-4444-1111"));
memList.add(new Member(6,"일지매","010-5555-1111"));
memList.add(new Member(2,"변학도","010-6666-1111"));
System.out.println("정렬전...");
for(Member mem : memList){
System.out.println(mem);
}
System.out.println("----------------------------------------------------");
Collections.sort(memList, new SortNumDesc());//comparator 외부정렬
Collections.sort(memList);//comparable 내부정렬
System.out.println("정렬후...");
for(Member mem : memList){
System.out.println(mem);
}
System.out.println("----------------------------------------------------");
}
}
//Member클래스의 회원이름을 기준으로 오름차순 정렬이 되도록 내부 정렬 기준 추가하기
//=>Comparable인터페이스를 구현한다.
class Member implements Comparable<Member>{
private int num; //회원번호
private String name; //회원이름
private String tel; //전화번호
public Member(int num, String name, String tel) {
super();
this.num = num;
this.name = name;
this.tel = tel;
}
//String
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
@Override
public String toString() {
return "Member [num=" + num + ", name=" + name + ", tel=" + tel + "]";
}
//내부 정렬 기준을 설정하는 메서드
//(회원이름의 오름차순 기준 설정)
@Override
public int compareTo(Member mem) {
/*
if(this.name.compareTo(mem.name) > 0) return 1;
else if(this.name.compareTo(mem.name) < 0) return -1;
return 0;
*/
return this.getName().compareTo(mem.getName());
}
}
//Member클래스의 회원번호(num)를 기준으로 내림차순되는 외부정렬기준 class를 작성하시오.
class SortNumDesc implements Comparator<Member>{
@Override
public int compare(Member mem1, Member mem2) {
/*
if(mem1.getNum() - mem2.getNum() > 0) return -1;
else if(mem1.getNum() - mem2.getNum() < 0) return 1;
return 0;
*/
//Wrapper클래스를 이용하는 방법 - compare가 static이 아님
//return new Integer(mem1.getNum()).compareTo(mem2.getNum())*-1;
//Wrapper클래스를 이용하는 방법 - compare가 static임
return Integer.compare(mem1.getNum(), mem2.getNum())*-1;
}
}