본문 바로가기

카테고리 없음

[Java] TreeMap 심화

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
반응형