본문 바로가기

.주제별/Java

Java) 정렬, Collections 사용

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);
    }
    ..
}