JAVA에서 정렬을 처리하는 방법은 배열의 경우 Arrays.sort(arr),
리스트의 경우 Collections.sort(list)를 사용하는 것이 일반적이다.
1. Arrays.sort(array);
: 원시(primitive) 데이터 타입의 대해 정렬을 지원
package sort;
import java.util.Arrays;
public class arraysSort {
public static void main(String[] args) {
int[] intArr = {1, 10, 4, 3, 2};
String[] strArr = {"pineapple", "Apple", "Orange", "Banana"} ;
Arrays.sort(intArr);
Arrays.sort(strArr);
// 정렬결과 출력
for(int i : intArr) {
System.out.print(i+" ");// 1 2 3 4 10
}
for(String str : strArr) {
System.out.print(str+" "); //Apple Banana Orange pineapple
}
}
}
2. Collections.sort(List);
: collection 오브젝트 하위의 구조들에 대한 정렬
Arrays.sort를 사용하지 못하는대신 Collection에서 sort 메소드를 제공함
package sort;
import java.util.*;
public class collection {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Pineapple");
list.add("Apple");
list.add("Orange");
list.add("Banana");
System.out.println(list); //정렬 전 : [Pineapple, Apple, Orange, Banana]
Collections.sort(list);
System.out.println(list); //정렬 후 : [Apple, Banana, Orange, Pineapple]
}
}
3. Comparable 구현
: String, Integer, Date등의 JAVA에서 기본 제공해주는 Object의 경우는 별다른 처리 없이 Collections.sort(); 를 사용하여 정렬이 가능하다. 하지만 사용자 정의 객체의 경우 무엇을 기준으로 정렬하는지 모호하기 때문에 sort를 사용하기 위해서는 적절한 기준 (객체들 사이의 크기 관계 지정)이 있어야 한다.
Ex)
Person 클래스 - 사용자 정의 클래스
class Person {
String name;
int age;
public person(String name, int age) {
this.name = name;
this.age = age;
}
}
Main Class - 오류
public class people {
public static void main(String[] args) {
List<Person> people = new ArrayList<>();
people.add(new Person("kim", 28));
people.add(new Person("park", 30));
people.add(new Person("choi", 35));
Collections.sort(people);
//오류
//어떤 기준으로 people을 정렬해야 하는지 관계 모호
}
}
=> Person의 어떤 멤버변수를 기준으로 정렬을 해야할지도 모르기 때문에 이를 개발자가 직접 정해주어야한다. Person타입의 객체를 원소로 가진 List를 정렬하고자 한다면 Comparable인터페이스를 구현해야한다. 즉, compareTo(T obj) 메소드를 오버라이딩 해야한다.
사용자 정의 Comparable 구현 예시
- 인자로 전달된 obj가 작다면 양의 정수 반환
- 인자로 전달된 obj가 크다면 음의 정수 반환
- 인자로 전달된 obj와 같다면 0을 반환
- Person의 age를 기준으로 정렬한다고 기준을 잡고, compareTo()메소드를 오버라이딩
class Person implements Comparable<Person>{
String name;
int age;
//getter, setter, constructor 생략
@Override
public int compareTo(Person o) {
if(this.age > o.age) {
return 1;
}else if (this.age < o.age) {
return -1;
}else {
return 0;
}
}
'공부 > Java' 카테고리의 다른 글
Java - String의 startsWith(), endsWith() 사용 방법 (0) | 2021.02.15 |
---|