JAVA/코드

2022_10_24 연습3 Array.메서드 (정렬예제)

0304호 2022. 10. 24. 17:58

정렬의 다양한 방법

package newnew;

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class Main {
	
	public static void main(String[] args) {
		
		PersonVO[] persons = {
				new PersonVO(1,"수지", 29),
				new PersonVO(2,"아이유", 30),
				new PersonVO(3,"카리나", 23),
				new PersonVO(4,"아담", 46),
		};
		//Arrays.sort 메서드는 배열을 대입하면 부등호 혹은 compareTo라는 메서드를 호출해서
		//크기 비교를 한 후 정렬을 수행해 준다.
//		Arrays.sort(persons);
		
		//동적으로 크기 비교 하는 메서드를 설정
		//1. 이름의 오름차순  2. 이름의 내림차순  3. 나이의 오름차순  4. 나이의 내림차순
		Scanner scan = new Scanner(System.in);
		System.out.println("1. 이름의 오름차순  2. 이름의 내림차순  3. 나이의 오름차순  4. 나이의 내림차순");
		String menu = scan.nextLine();
		switch(menu.trim()) {
		case "1":
			System.out.println("이름의 오름차순");
			Arrays.sort(persons, new Comparator<PersonVO>() {
				public int compare(PersonVO o1, PersonVO o2) {
					return o1.getName().compareTo(o2.getName());
				}
			});
			break;
			
		case "2":
			System.out.println("이름의 내림차순");
			Arrays.sort(persons, new Comparator<PersonVO>() {
				public int compare(PersonVO o1, PersonVO o2) {
					return o2.getName().compareTo(o1.getName());
				}
			});
			
			break;
			
		case "3":
			System.out.println("나이의 오름차순");
			Arrays.sort(persons, new Comparator<PersonVO>() {
				public int compare(PersonVO o1, PersonVO o2) {
					return o1.getAge()-o2.getAge();
				}
			});
			break;
			
		case "4":
			System.out.println("나이의 내림차순");
			Arrays.sort(persons, new Comparator<PersonVO>() {
				public int compare(PersonVO o1, PersonVO o2) {
					return o2.getAge()-o1.getAge();
				}
			});
			
			break;
			
		default :
			System.out.println("메뉴는 1~4번만 선택하세요");
			break;
		}

		scan.close();
		
//		Arrays.sort(persons, new Comparator<PersonVO>() {
//
//			@Override
//			public int compare(PersonVO o1, PersonVO o2) {
//				// TODO Auto-generated method stub
//				return o2.getAge() - o1.getAge();
//			}
//			
//		});
//				
		//배열의 데이터 출력
		//Arrays.toString은 배열의 각 요소의 toString을 전부 호출해서
		//하나의 문자열로 리턴하는 매서드이다.
		System.out.println(Arrays.toString(persons));
		
//		System.out.println(System.identityHashCode(persons));  	//해쉬코드 뽑는법
		
	}

}
package newnew;

import java.util.Arrays;

public class PersonVO implements Comparable<PersonVO>{

	private int num;
	private String name;
	private int age;
	
	//매개변수가 없는 생성자 = Default Constructor
	public PersonVO() {
		super();
		// TODO Auto-generated constructor stub
	}

	//속성을 전부 매개변수로 받는 생성자 = 인스턴스 생성 후 값을 빠르게 대입하기 위해서 생성
	public PersonVO(int num, String name, int age) {
		super();
		this.num = num;
		this.name = name;
		this.age = age;
	}
	
	//Getter & Setter : 속성의 값에 접근하고 변경하기위한 메서드
	//일반적으로 VO 클래스의 경우는 Setter을 만들지 않음
	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 int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}


	//데이터 출력을 편리하게 하기 위한 메서드
	//출력하는 메서드에 인스턴스 이름을 대입하면 이 메서드가 호출되서 출력됩니다.
	@Override
	public String toString() {
		return "PersonVO [ num = " + num + ", name = " + name + ", age = " + age + "]";
	}
	
	//크기 비교하는 메서드 :  정렬하기 위해서 사용
	public int compareTo(PersonVO o) {
		// 크기 비교 방법 설정
		return this.name.compareTo(o.name) ;
	}
	
}