Magicode logo
Magicode
0

[Java] Mapのkeyに自作クラスを指定するときの注意

久々にJavaでプログラム書きました。

なかなか勘が鈍っているのか、Mapのkey操作ではまってしまったので、メモしておきます。

やりたいこと

Mapのkeyとvalueに自作クラスを使って、containsKey()やput()をしてみます。

こんな感じです。

ここまでは、簡単にできると思っていました。。

発生した問題

今考えると、「そりゃそうだよな」と思います。。

1つデータをputして、containsKey()でkeyを検索したがひっかからない。

containsKey()って引数がObject型で、intでもStringでも検索してくれるイメージでしたが、今回のような自作クラスのObjectだと、このままでは検索できないんですね。

TemplateKeyクラスのオブジェクトを新しく生成して、それをcontainsKey()の引数に指定するとfalseになります。

まあ、Stringの比較の時と同様に、オブジェクト比較になっているからなんでしょうね。。

put()やget()も同様に、今回やりたいことがオブジェクト比較によってできなくなっていました。

解決するためにやったこと

解決方法は簡単でした。

TemplateKeyクラスのequals()とhashCode()を、オーバーライドして処理を書き換えてあげれば解決できました。

Discussion

コメントにはログインが必要です。