oinume journal

Scratchpad of what I learned

commons-langのEqualsBuilderの速度

Javaの有名なライブラリでcommons-langというのがある。この中にEqualsBuilderというequals()メソッドを簡単に実装するための便利クラスがある(HashCodeBuilder, ToStringBuilderというクラスもある)。使い方はこんな感じ。

 

@Override

public boolean equals(Object o) {

if (this == o) {

return true;

} else if (!(o instanceof MyClass)) {

return false;

}

MyClass other = (MyClass)o;

return new EqualsBuilder()

.append(this.field1, o.field1)

.append(this.field2, o.field2)

.build();

}

 

便利なので愛用してるんだけど、普通にequals()を実装した場合と比べてパフォーマンス的にどうなの?っていうのが気になったのでベンチマークを取ってみた。ちなみに、EqualsBuilder.reflectionEquals()というリフレクションを使うバージョンもあるので、あわせて調べてみた。

 

結果

下記の3パターンで10万回equals()を呼び出してベンチした結果(ベンチマークのコード

 

実装かかった時間(ミリ秒)

EqualsBuilderを使わない普通の実装44

EqualsBuilderを使った実装50

EqualsBuilder.reflectionEqualsを使った実装807

 

 

結論としては

 

 

  • EqualsBuilderを使わない場合と使った場合でほとんど差がないのでEqualsBuilderは積極的に使うべし

 

 

  • 当たり前だけどリフレクションを使うと遅い。ただ、10万回呼び出して807ミリ秒なので、ケース・バイ・ケースで使えばいいと思う。

 

 

になるのかなぁと。reflectionEqualsは1行でequals()の処理がかけてしまい麻薬的に便利なので、使えるところでは使ってもいいんじゃないかと思った次第。

 

[tmkm-amazon]489471499X[/tmkm-amazon]