내부정렬과 외부정렬(2)

이중호·2021년 11월 1일
0

고급자바

목록 보기
6/6
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;
	}
}
profile
배워가는 신입개발자

0개의 댓글