TreeMap 키(key)나 값(value)부분에 클래스같은 객체도 저장할 수 있다.
이럴때는 어떻게 순서를 정할까?
그것은 객체 생성하는 클래스에 compareTo() 오버라이딩해서 비교해줄 키나 값을 선택해서 메소드를 생성해준다.
.
.
package map;
public class Album implements Comparable<Album>{
private String artist,title;
private int price;
public Album(String artist, String title, int price) {
this.artist = artist;
this.title = title;
this.price = price;
}
public String getArtist() {
return artist;
}
public void setArtist(String artist) {
this.artist = artist;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
@Override
public String toString() {
return "Album [artist=" + artist + ", title=" + title + ", price=" + price + "]";
}
@Override
public int compareTo(Album o) {
if(artist.compareTo(o.getArtist()) > 0) return 1;
else if(artist.compareTo(o.getArtist()) == 0) return 0;
else return -1;
// compareTo() 자체가 int값으로 반환되므로 if문을 쓰지 않아도 됨
// return artist.compareTo(o.getArtist())
}
}
.
.
compareTo() 부분을 if문으로 작성했지만 사실
String에서 사용하는 compareTo()는 숫자값을 갖고있어서 바로 return해줘도 된다.
.
.
그러면 test를 해보자
.
.
package map;
import java.util.Set;
import java.util.TreeMap;
public class TestMap {
public static void main(String[] args) {
TreeMap<Album, String> albumMap = new TreeMap<>();
Album album1 = new Album("Adele", "25", 14900);
Album album2 = new Album("Taylor Swift", "1989", 18800);
Album album3 = new Album("Sam Smith", "In the Lonely Hour", 20000);
Album album4 = new Album("Beatles", "The Beatles 1", 20000);
Album album5 = new Album("Ariana Grande", "My Everything", 17400);
albumMap.put(album1, "2015년 11월");
albumMap.put(album2, "2014년 11월");
albumMap.put(album3, "2014년 5월");
albumMap.put(album4, "2015년 12월");
albumMap.put(album5, "2014년 8월");
Set<Album> keySet = albumMap.keySet();
for(Album key : keySet) {
System.out.println(key + " : " + albumMap.get(key));
}
System.out.println();
}
}
.
.

.
.
키 값을 집합에 저장하여 출력하는 것이 가장 좋다.
728x90
반응형