JAVA

[JAVA] HeadFirst 16장 : TreeSet

ShineWithMe 2012. 2. 29. 17:33


자료구조를 정렬된 상태로 유지시키고 싶다면 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]