티스토리 뷰
[Java] 자바 - ArrayList 정렬하기 (Comparable / Comparator)
Lkt_Programmer 2019. 6. 15. 11:59ArrayList를 정렬하는 방법은 Collections.sort() 함수를 통해 가능합니다. Collections.sort() 함수는 두 가지 형태에 대해서 오버라이딩이 되어 있습니다.
첫 번째 함수 형태는 하나의 인자 정보를 넘겨주는 형태로 ArrayList 객체를 넘겨줍니다. 이때 ArrayList에 담기는 요소의 Type 클래스에서 Comparable 인터페이스를 구현하여 compareTo() 함수를 오버라이딩 해줘야합니다.
두 번째 함수 형태는 첫 번째 인자를 ArrayList 객체를 넘겨주게 되고 두 번째 인자는 Comparator 인터페이스를 상속받아 compare() 함수를 오버라이딩한 구현체를 넘겨주게 됩니다.
1. Integer Type Data를 요소로 가지는 ArrayList
import java.util.Comparator;
class Descending implements Comparator<Integer>{
public int compare(Integer a, Integer b)
{
return b.compareTo(a);
}
}
import java.util.Comparator;
class Ascending implements Comparator<Integer>{
public int compare(Integer a, Integer b)
{
return a.compareTo(b);
}
}
▼ Descending 클래스는 내림차순 정렬을 위해 Comparator 인터페이스를 상속받아 compare() 함수를 오버라이딩 한 클래스입니다. 마찬가지로 Acending 클래스는 오름차순 정렬을 위한 클래스입니다.
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class Main{
public static void main(String[] args)
{
ArrayList<Integer> integerList = new ArrayList();
//데이터 초기화
integerList.add(5);
integerList.add(2);
integerList.add(3);
integerList.add(4);
integerList.add(1);
Collections.sort(integerList, new Descending());
System.out.print("내림차순 : ");
for(Integer integer : integerList)
{
System.out.print("[" + integer + "]");
}
System.out.println();
Collections.sort(integerList, new Ascending());
System.out.print("오름차순 : ");
for(Integer integer : integerList)
{
System.out.print("[" + integer + "]");
}
}
}
▼ 먼저 내림차순 정렬을 위해 Collections.sort() 함수를 호출합니다. 이때 첫 번째 인자로는 List 객체가 넘어가게 되고 두 번째 인자는 앞서 정의한 Comparator 인터페이스를 상속받아 구현된 Descending 클래스 객체를 넘겨주게 됩니다. 마찬가지로 오름차순 정렬을 위해서 Collections.sort() 함수를 호출하고 첫 번째 인자는 List 객체를 넘겨주면서 두 번째 인자로 Ascending 클래스 객체를 넘겨주게 됩니다.
2. 사용자 정의형 객체 정렬하기
이번에는 두 가지 방식으로 사용자 정의 객체를 정렬해보겠습니다.
2.1 Comparable 인터페이스 상속
public class Movie implements Comparable<Movie>{
private String title;
private String Category;
private String grade;
public Movie(String title, String Category, String grade)
{
this.title = title;
this.Category = Category;
this.grade = grade;
}
public String getTitle() {
return title;
}
public String getCategory() {
return Category;
}
public String getGrade() {
return grade;
}
public int compareTo(Movie movie) {
return this.title.compareTo(movie.title);
}
}
▼ 영화 정보를 담을 수 있는 Movie 클래스입니다. 생성자 함수를 통해 각 멤버 변수를 초기화하고 getter 함수를 구현하여 외부에서 각 멤버 변수에 접근할 수 있도록 구현하였습니다. 해당 클래스의 객체를 오름차순 정렬을 위하여 Comparable 인터페이스를 상속받아 compareTo() 함수를 오버라이딩 하였습니다.
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class Main{
public static void main(String[] args)
{
ArrayList<Movie> movieList = new ArrayList();
movieList.add(new Movie("어벤져스", "액션", "12세 관람가"));
movieList.add(new Movie("범죄도시", "액션", "19세 관람가"));
movieList.add(new Movie("미션임파서블", "액션", "15세 관람가"));
System.out.print("Title 정렬 전 :");
for(Movie movie : movieList)
{
System.out.print("[" + movie.getTitle() + "]");
}
System.out.println();
Collections.sort(movieList);
System.out.print("Title 오름차순 정렬 : ");
for(Movie movie : movieList)
{
System.out.print("[" + movie.getTitle() + "]");
}
}
}
2.2 Comparator 인터페이스 구현
import java.util.Comparator;
class Ascending implements Comparator<Movie>{
public int compare(Movie a, Movie b)
{
return a.getTitle().compareTo(b.getTitle());
}
}
▼ Comparator 인터페이스를 상속받아 compare() 함수를 구현하는 Ascending 클래스입니다.
public class Main{
public static void main(String[] args)
{
ArrayList<Movie> movieList = new ArrayList();
movieList.add(new Movie("어벤져스", "액션", "12세 관람가"));
movieList.add(new Movie("범죄도시", "액션", "19세 관람가"));
movieList.add(new Movie("미션임파서블", "액션", "15세 관람가"));
System.out.print("Title 정렬 전 :");
for(Movie movie : movieList)
{
System.out.print("[" + movie.getTitle() + "]");
}
System.out.println();
Collections.sort(movieList, new Ascending());
System.out.print("Title 오름차순 정렬 : ");
for(Movie movie : movieList)
{
System.out.print("[" + movie.getTitle() + "]");
}
}
}
▼ Collections.sort() 함수를 호출하면서 두 번째 인자로 앞서 구현한 Ascending 클래스 객체를 넘겨줍니다. 정렬 결과는 Comparable 인터페이스를 통해 구현한 예제와 같습니다.
'Programming > JAVA' 카테고리의 다른 글
[Java] 자바 - 제네릭(Generic) (0) | 2019.06.16 |
---|---|
[JAVA] 자바 - 구분자를 통해 문자열 나누기 (StringTokenizer 알아보기) (0) | 2019.05.03 |
[JAVA] 자바 - Math 클래스 (수학 관련 처리 클래스) (3) | 2019.04.10 |
[JAVA] 자바 - ArrayList 자료구조 활용하기 (4) | 2019.04.09 |
[JAVA] 자바 - 공백 문자 제거하기 (trim, replaceAll) (0) | 2019.04.08 |