본문 바로가기
IT/자바

배열 정렬과 compareTo

by 독서실총무J 2017. 5. 18.
반응형

오늘도 즐겁게 시작해보도록 하자

물론, 그전에 잠깐 딴소리도 좀 하자


내가 일하고 있는 독서실은

정말 다 좋다 다 마음에 든다

딱하나만 제외하고 말이다


일하는데 의자가 너무너무 불편하다

허리가 파괴되는 느낌이랄까

오래 앉아있으면 목부터 허리까지

너무나도 아파서 미칠것 같다


딱 이것만 아니면 좋은데

사장님한테 말할까 하다가

맨날 참고 있다 


뭐 어쩌겠는가 

열심히 공부해서 얼렁 나가는게

답이 아니겠는가?


그러므로 오늘도 어서 공부를 하도록 하자


배열 정렬에 대해서 알아보겠다

그냥 단순하게 생각하면 된다

정렬 , 기준에 맞게 재조정 하면 된다


예제를 보면서 이해해보자


	// 배열의 도우미 클래스
	import java.util.Arrays;
	class SortEx1 {
		public static void main(String[] args) {
			/*
				-정렬
					1. 오름차순 정렬(뒤로 갈수록 커짐)
					2. 내림차순 정렬(뒤로 갈수록 작아짐)

			*/
			// 1, 3, 4, 5, 7
			int[] arr = {3, 1, 5, 4, 7};
			
			// 정렬(오름차순)
			Arrays.sort(arr, 2, 4);

			// 배열을 문자열로 표현
			System.out.println(Arrays.toString(arr));

			String[] strArr = 
				{"가가나", "가가", "가나나", "가나가"};
			
			Arrays.sort(strArr);

			System.out.println(Arrays.toString(strArr));
		}
	}


배열 정렬은 아주 간단하다

Arrays.sort(arr, 2, 4);

이부분이다


arr은 배열이고 , 

2는 시작 인덱스 4는 끝을 말한다

물론 0부터 생각해야 할것이다


이것은 숫자 뿐 아니라 문자열도

인식이 가능하다 

문자열의 정렬의 크고 작음은

사전에 나오는것을 생각하면 된다


그리고 중간에 나오는 

배열을 문자열로 바꿔주는 것도 유심히 보자

아주 유용하게 쓰이는 명령어이기 때문이다


더 설명이 필요없을거라 생각한다

넘어가자

compareTo를 보도록 하자


import java.util.Arrays;
class Phone implements Comparable {
	private String model;
	private int price;

	public Phone(String model, int price) {
		setModel(model);
		setPrice(price);
	}
	public String getModel() {
		return model;
	}
	public void setModel(String model) {
		this.model = model;
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int price) {
		this.price = price;
	}
	@Override
	public String toString() {
		return model + "(" + price + ")";
	}
	// 정렬의 기준, 크기비교의 경우를 정한다.
	// a.compareTo(b)
	// a > b : 양수
	// a < b : 음수
	// a == b : 0
	@Override
	public int compareTo(Phone other) {
		// 가격으로 오름차순
		if(price > other.getPrice()) {
			return 1;
		} else if(price < other.getPrice()) {
			return -1;
		} else {
			// 가격이 같은 경우 이름으로 오름차순 정렬한다.
			return model.compareTo(other.getModel()) * -1;
		}
	}
}
class SortEx2 {
	public static void main(String[] args) {
		Phone[] arr = {
			new Phone("갤럭시7", 90),
			new Phone("아이폰7", 100),
			new Phone("V20", 80),
			new Phone("엑스페리아", 80),
			new Phone("블랙베리", 80),
			new Phone("옴니아", 15)
		};
		
		Arrays.sort(arr);

		System.out.println(Arrays.toString(arr));
	}
}


코드 중간에 주석을 보자

크기를 어떻게 비교하는지 나와있는

부분을 말하는거다 


compareTo는 저게 다이다

사용법은 보시다시피 매우 간단하다


비교를 통해서 0보다 큰지

아니면 작은지 같은지 

따진다음 정렬을 해준다


그러므로 리턴 형식에서 

정수로 나올수 있게끔

구성해주어야 할것이다


너무 편하게 사용할수 있지 않은가?

아주 좋다 사실 이거 배울때가 제일 좋았다

이해하기가 너무 쉬웠기 때문에


import java.util.Arrays;
class Human implements Comparable{
	public String name;
	public int age;

	public Human(String name, int age) {
		this.name = name;
		this.age = age;
	}

	@Override
	public String toString() {
		return name + " : " + age;
	}

	@Override
	public int compareTo(Human other) {
		int result = name.compareTo(other.name) * -1;

		if(result == 0) {
			result = age - other.age;
			/*
			if(age > other.age) {
				result = 1;
			} else if(age < other.age) {
				result = -1;
			} else {
				result = 0;
			}
			*/
		}
		return result;
	}
}
class SortEx3 {
	public static void main(String[] args) {
		Human[] list = {
			new Human("송중기", 40),
			new Human("에일리", 21),
			new Human("공유", 58),
			new Human("김유정", 24),
			new Human("송중기", 58),
			new Human("윤아", 24)		
		};
		// 이름으로 내림차순 정렬하시오. 
		// 단, 이름이 같은경우 나이로 오름차순 정렬한다.
		Arrays.sort(list);

		System.out.println(Arrays.toString(list));
	}
}


벌써 마지막 예제이다

오늘은 3개밖에 준비를 못했다

아까 배열 정렬을 말할때 언급했듯

문자열도 가능하다

지금은 그것을 보여주고 있다


compareTo 메소드 안에 

주석으로 표현한 부분과 

그위에 있는 부분은 동일한

표현이다 


조금만 생각하면 바로 알수 있다

두수의 차이를 if로 표현할것인지

- 로 표현할지 고를 뿐인것이다


그렇다면 compareTo에서 문자열을

비교할때 수를 어떻게 정하는걸까?

그것은 각자 알아보도록 하자


수업 들을때도 강사가 문제로 내줬던 것이다

물론, 쬐금만 생각해봐도 바로 알수 있다


안되면 구글링을 하면 된다

오늘은 여기까지

모두 굿밤되시길

반응형

'IT > 자바' 카테고리의 다른 글

Collection 및 Iterator  (0) 2017.05.22
Comparator 너는 누구니?  (0) 2017.05.19
제네릭 사용법과 학급관리시스템  (0) 2017.05.17
가변형 인자와 배열 두번째  (0) 2017.05.16
배열 정리 첫번째  (0) 2017.05.15

댓글