1. ExecClass

import java.util.ArrayList;
import java.util.Comparator;

public class ExecClass {
	public static void main(String[] args) {
		ArrayList<Student> arr = new ArrayList<Student>();
		arr.add(new Student("홍길동",100));
		arr.add(new Student("둘리",10));
		arr.add(new Student("또치",80));
		arr.add(new Student("희동이",50));
		
		// 정렬 이전의 값을 확인하기 위한 출력 부분.
		for (int i = 0; i < arr.size(); i++) {		// 배열과 비슷하나 length가 아닌 size로 접근.
			System.out.println(arr.get(i).name + " : " + arr.get(i).score);		// get(i)로 접근.
		}
		
		System.out.println("--------------------------------------------");
		
		
		// 1. 여기서 바로 구현하자.
//		arr.sort(new Comparator<Student>() {	// generic으로 데이터 타입을 Student로 잡아준다.
//
//			@Override
//			public int compare(Student o1, Student o2) {	// 비교할 대상을 넣는다. Student 클래스 데이터 타입의 객체1(o1), 객체2(o2).
//				// TODO Auto-generated method stub
//				// return에다 내가 정렬하고 싶은 데이터 기준과 오름차순, 내림차순을 구현한다.
//				return o1.score - o2.score;				// score를 기준으로 오름차순 정렬. (10 -> 50 -> 80 -> 100)
//				return o2.score - o1.score;				// score를 기준으로 내림차순 정렬. (100 -> 80 -> 50 -> 10)
//				return o1.name.compareTo(o2.name);		// name을 기준으로 오름차순 정렬. (둘리 -> 또치 -> 홍길동 -> 희동이)
//				return o2.name.compareTo(o1.name);		// name을 기준으로 오름차순 정렬. (희동이 -> 홍길동 -> 또치 -> 둘리)
//				
//				if (o1.name.equals("또치")) {	 // 또치가 나오면 젤 앞으로 보내. (또치 -> 나머지는 그대로)
//					return -1;		// 내림차순.
//				}
//				return 0;
//		
//				if (o1.name.equals("또치")) {	 // 또치가 나오면 젤 아래로 보내.
//					return 1;		// 오름차순.
//				}
//				return 0;
//		
//	
//
//			}
//			
//		});
		
		// 2. StudentCompare를 만들어 따로 분리하자.
		StudentCompare sc = new StudentCompare();
		arr.sort(sc);
		
		
		
		
		// 정렬을 확인하기 위한 출력 부분.
		System.out.println("정렬된 결과는");
		for (int i = 0; i < arr.size(); i++) {
			System.out.println(arr.get(i).name + " : " + arr.get(i).score);
		}

				
	}

}

 

 

2. Student

public class Student {
	String name;
	int score;
	
	Student(String name, int score) {
		this.name = name;
		this.score = score;
	}

}

 

 

3. StudentCompare

import java.util.Comparator;

public class StudentCompare implements Comparator {	// generic을 사용하지 않아 어떤 형태인지 모를 경우 Object 형태로만 사용이 가능하다. 그래서 형변환.

	@Override
	public int compare(Object o1, Object o2) {
		Student s1 = (Student)o1;
		Student s2 = (Student)o2;
		
		return s1.score - s2.score;				// score를 기준으로 오름차순 정렬. (10 -> 50 -> 80 -> 100)
//		return s2.score - s1.score;				// score를 기준으로 내림차순 정렬. (100 -> 80 -> 50 -> 10)
//		return s1.name.compareTo(s2.name);		// name을 기준으로 오름차순 정렬. (둘리 -> 또치 -> 홍길동 -> 희동이)
//		return s2.name.compareTo(s1.name);		// name을 기준으로 오름차순 정렬. (희동이 -> 홍길동 -> 또치 -> 둘리)
		
//		if (s1.name.equals("또치")) {	 // 또치가 나오면 젤 앞으로 보내. (또치 -> 나머지는 그대로)
//			return -1;		// 내림차순.
//		}
//		return 0;
		
//		if (s2.name.equals("또치")) {	 // 또치가 나오면 젤 아래로 보내.
//			return -1;		// 오름차순.
//		}
//		return 0;
	
	}
}


정렬 이전 (입력 순서대로 출력)

홍길동 : 100
둘리 : 10
또치 : 80
희동이 : 50
------------------------------------------------------------------------------
return s1.score - s2.score;				// score를 기준으로 오름차순 정렬. (10 -> 50 -> 80 -> 100)

정렬된 결과는
둘리 : 10
희동이 : 50
또치 : 80
홍길동 : 100
------------------------------------------------------------------------------
return s2.score - s1.score;				// score를 기준으로 내림차순 정렬. (100 -> 80 -> 50 -> 10)

정렬된 결과는
홍길동 : 100
또치 : 80
희동이 : 50
둘리 : 10
------------------------------------------------------------------------------
return s1.name.compareTo(s2.name);		// name을 기준으로 오름차순 정렬. (둘리 -> 또치 -> 홍길동 -> 희동이)

정렬된 결과는
둘리 : 10
또치 : 80
홍길동 : 100
희동이 : 50
------------------------------------------------------------------------------
return s2.name.compareTo(s1.name);		// name을 기준으로 오름차순 정렬. (희동이 -> 홍길동 -> 또치 -> 둘리)

정렬된 결과는
희동이 : 50
홍길동 : 100
또치 : 80
둘리 : 10
------------------------------------------------------------------------------
if (s1.name.equals("또치")) {	 // 또치가 나오면 젤 앞으로 보내. (나머지는 그대로)
	return -1;		// 내림차순.
}
return 0;
        
정렬된 결과는
또치 : 80
홍길동 : 100
둘리 : 10
희동이 : 50
------------------------------------------------------------------------------
if (s2.name.equals("또치")) {	 // 또치가 나오면 젤 아래로 보내. (나머지는 그대로)
	return -1;		// 오름차순.
}
return 0;
        
정렬된 결과는
홍길동 : 100
둘리 : 10
희동이 : 50
또치 : 80

 

+ Recent posts