자료구조를 정렬된 상태로 유지시키고 싶다면 TreeSet을 쓰면된다.
* 한가지 중요한건...정렬할때 Song에 어떤 멤버변수로 비교할지 기준을 정해야 하기때문에 마찬가지로 제네릭으로 들어가는 클래스는 Comparable을 implements 해서 compareTo() 메소드를 구현해야한다.
public class Jukebox8 {
ArrayList<Song> songList = new ArrayList<Song>();
int val;
public static void main(String[] args) {
new Jukebox8().go();
}
public void go() {
getSongs();
System.out.println(songList);
Collections.sort(songList);
System.out.println(songList);
TreeSet<Song> songSet = new TreeSet<Song>();
songSet.addAll(songList);
System.out.println(songSet);
}
void getSongs() {
try {
File file = new File("SongListMore.txt");
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = null;
while ((line = reader.readLine()) != null) {
addSong(line);
}
} catch(Exception e) {e.printStackTrace();}
}
void addSong(String lineToParse) {
String[] tokens = lineToParse.split("/");
Song nextSong = new Song(tokens[0], tokens[1], tokens[2], tokens[3]);
songList.add(nextSong);
}
}
아래 세번재 줄처럼 중복도 없고..정렬까지 되어 나온다...다만 항상 정렬상태를 유지하기 때문에 약간의 성능저하가 있다.
[Pink Moon, Somersault, Shiva Moon, Circles, Deep Channel, Passenger, Listen, Listen, Listen, Circles]
[Circles, Circles, Deep Channel, Listen, Listen, Listen, Passenger, Pink Moon, Shiva Moon, Somersault]
[Circles, Deep Channel, Listen, Passenger, Pink Moon, Shiva Moon, Somersault]