一覧の中に値が存在しているかどうかをチェックしたいと思ったら、Map#containsKey()(Set#contains())が使える。
しかしHashMapは事前にハッシュ値を計算するというコストがかかるので、「一覧の中の要素数が少ないなら、List#contains()の方が実行速度が速いんじゃないか」と思い、ちょっと試してみた。
…結論は、考え方は合っていたけれども、そのしきい値は概ね「1」(爆)
つまりほとんどの場合、要素数1個までならArrayListの方が速いが、2個以上ならHashMapの方が速い。
そんなの意味無え!?
複数の値があるからその中にマッチするものがあるかチェックしたい訳で、1個しか比較対象が無いならコレクション(MapやList)なんかそもそも使わないっつーの(苦笑)
という訳で、そういう使い方をしたい場合は、変な事を考えずに素直にHashMap(HashSet)を使えばいいということだ。
それにしても、JRE1.5や1.6でArrayListやHashMapが高速化しているのには結構驚いた。JDK1.4を使うの、いい加減やめて欲しい…。(趣味の方ではもうJDK1.6しか使っていないが…)
※コメント投稿者のブログIDはブログ作成者のみに通知されます