Java) 정렬, Collections 사용
2008. 6. 2. 16:07ㆍ.주제별/Java
Java에서 정렬을 하려면, TreeSet을 이용하는 방법이 있다.
또 다른 방법으로는, Collections 클래스를 활용하는 방법이 있다.
Song 클래스를 다음과 같이 정의하자
public class Song {
private String title;
private String author;
private int rank;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public int getRank() {
return rank;
}
public void setRank(int rank) {
this.rank = rank;
}
}
main함수내에서 다음럼 song list을 만든다
public class A{
ArrayList songList = new ArrayList();
public static void main(String[] args){
addSong();
..
}
//Song list을 만들자
private static void addSong(){
Song song1 = new Song("누난 예뻐","누구냐",1);
songList.add(song1);
Song song2 = new Song("가질수 없는 너","기억안남",2);
songList.add(song2);
Song song3 = new Song("사랑해","나두",3);
songList.add(song3);
}
}
main 함수내에서, Collection.sort(songList); 을 통해서 정렬을 시도할 것이다.
다음의 두 방법이 있다.
방법 1. Song 클래스에서 "Comparable" 를 구현함 (비교는 하나의 구성원만 됨)
public class Song implements Comparable {
private String Title;
..
..
//Comparable 의 compareTo 메서드 구현함
public int compareTo(Object o){
return title.compareTo(((Song)o).title );
}
}
public class A{
ArrayList songList = new ArrayList();
public static void main(String[] args){
..
//song class에서 title 만 compareTo로 지정하였기때문에,Title 별 정렬함
Collenctions.sort(songList);
..
}
}
방법 2. Song 클래스의 각 구성원들을 구별할 수 있게 함
public class A{
ArrayList songList = new ArrayList();
class TitleCompare implements Comparator {
public int compare(Song s1, Song s2) {
//ascending 정렬
return s1.getTitle().compareTo(s2.getTitle());
}
}
//Author 도 Title 처럼 "AuthorCompare" 만들어서 진행
class RankCompare implements Comparator {
public int compare(Song s1, Song s2) {
//ascending 정렬
return (s1.getRank() > s2.getRank() ? 1:0);
}
}
public static void main(String[] args){
//Title 순으로 정렬
TitleCompare titleCompare = new TitleCompare();
Collection.sort(songList, titleCompare);
//Rank 순으로 정렬
RankCompare rankCompare = new RankCompare();
Collection.sort(songList, rankCompare);
}
..
}