본문 바로가기

Java

ArrayList 를 Collection.sort() 을 이용한 정렬방법

1. SongList.txt

Pink Moon/Nick Drake/5/80
Somersault/Zero 7/4/84
Shiva Moon/Prem Joshua/6/120
Circles/BT/5/110
Deep Channel/Afro Celts/4/120
Passenger/Headmix/4/100
Listen/Tahiti 80/5/90

2. Song.java

package test;

class Song implements Comparable<Song> {

String title;
String artist;
String rating;
String bpm;

public int compareTo(Song s) {
// TODO Auto-generated method stub
return title.compareTo(s.getTitle());
}

Song(String t, String a, String r, String b) {
title = t;
artist = a;
rating = r;
bpm = b;
}

public String getTitle() {

return title;
}

public String getArtist() {
return artist;
}

public String getRating() {
return rating;
}

public String getBpm() {
return bpm;
}

public String toString() {

return title;
}

}

===============================================================================

1. JukeBox1 : 타이틀로 정렬(String 을 이용)

package test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Collections;

import java.util.*;
import java.io.*;

public class JukeBox1 {
ArrayList songList = new ArrayList();

public static void main(String[] args) {
new JukeBox1().go();
}

public void go() {
getSong();
System.out.println(songList);
System.out.println("====This starts Sorting ==== ");
Collections.sort(songList);
System.out.println(songList);
}

public void getSong() {
try {
File file = new File("SongList.txt");
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = null;
while ((line = reader.readLine()) != null) {
addSong(line);
}
} catch (Exception e) {
e.printStackTrace();
}
}

public void addSong(String lineToParse) {
String[] tokens = lineToParse.split("/");

songList.add(tokens[0]);
}
}

===============================================================================

[ 설 명 ]

객체를 이용한 정렬 sort() 메소드에서는 Comparable 객체로 구성된 목록만 받아들일 수 있습니다.

ArrayList<Song>을 낷() 메소드에 전달하려면Song 클래스에서 Comparable을 구현 해야만 합니다.

sort() 메소드가 그런 식으로 정의되어 있으니깐. API 문서를 살펴보면 COmparable 인터페이스가 메소드

한 개만 구현하면 되는 간단한 인터페이스라는 것을 알 수 있습니다.

public interface Comparable<T> {

int compareTo(T o);

}

여기서는

class Song implements Comparable<Song> {

public int compareTo(Song s) {
return title.compareTo(s.getTitle());
}

~~~

}

===============================================================================

2. JukeBox3 : 타이틀로 정렬(Song 객제 이용)

package test;

import java.util.*;
import java.io.*;

public class Jukebox3 {

ArrayList<Song> songList = new ArrayList<Song>();

public static void main(String[] args) {
Jukebox3 jukebox = new Jukebox3();
jukebox.go();
}

public void go() {
getSongs();
System.out.println(songList);
System.out.println("====This starts Sorting ==== ");
Collections.sort(songList);
System.out.println(songList);

}

void getSongs(){
try{
File file = new File("./SongList.txt");

BufferedReader reader = new BufferedReader(new FileReader(file));
String line = null;
while((line = reader.readLine()) != null){
this.addSong(line);
}
}catch(Exception ex){
ex.printStackTrace();
}

}

void addSong(String lineToParase){
String[] tokens = lineToParase.split("/");
Song nextSong = new Song(tokens[0],tokens[1],"","");
songList.add(nextSong);

}
}

3. Jukebox5 : 아티스트로 정렬 한 노래제목(Song 객제 이용)

package test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class Jukebox5 {

ArrayList songList = new ArrayList();


public static void main(String[] args){
new Jukebox5().go();

}

class ArtistCompare implements Comparator<Song> {
public int compare(Song one, Song two) {
return one.getArtist().compareTo(two.getArtist());
}
}

public void go(){

getSongs();
System.out.println("가 "+songList+" ");
Collections.sort(songList);
System.out.println("나 "+songList+"");

ArtistCompare artistCompare = new ArtistCompare();
Collections.sort(songList, artistCompare);
System.out.println("다 "+songList+"");

}

void getSongs(){
try{
File file = new File("./SongList.txt");

BufferedReader reader = new BufferedReader(new FileReader(file));
String line = null;
while((line = reader.readLine()) != null){
this.addSong(line);
}
}catch(Exception ex){
ex.printStackTrace();
}

}

void addSong(String lineToParase){
String[] tokens = lineToParase.split("/");
Song nextSong = new Song(tokens[0],tokens[1],"","");
songList.add(nextSong);

}

}

'Java' 카테고리의 다른 글

Collection Framework  (0) 2008.07.31
HashSet 를 Collection.sort() 을 이용한 정렬방법  (0) 2008.07.25
자바 Tip & Tuning Technic  (0) 2007.08.09
JAR 파일 포맷의 힘  (0) 2007.06.15
개발자가 놓치기 쉬운 자바의 기본원리  (0) 2007.06.15