TreeMapのKeyに独自クラスのオブジェクトを格納する場合の注意点


やりたかったこと

独自に作成したクラスHeroのインスタンスと倒した敵の数をペアでコレクションに格納し、画面表示をする。(表示順は不問)

やったこと

ペアで格納するためMapを採用。
(特に理由はなく)TreeMapを選択した。

Map <Hero,Integer> map = new TreeMap<>();

つまづいたこと

TreeMapは自然順序順に取り出す。
今回keyに独自クラスであるHero型を用いているがこの自然順序順を定義していないためエラーとなる。

解決策

今回は、表示順不問のため、HashMapを使用し回避。

Map<Hero,Integer> map = new HashMap<>();

表示順が指定されている場合はHeroクラスで自然順序順を定義する
下記は、Heroの名前順の例

public class Hero implements Comparable<Hero> {
	(省略)	
	public int compareTo(Hero obj) {
		return this.name.compareTo(obj.name);	
	}
}