1

Apache Commons Lang の HashCodeBuilder と Eclipse の hashCode() 生成を見てきました。Eclipse の hashCode() は非常に見にくいと言わざるを得ませんが、パフォーマンスの観点から HashCodeBuilder として使用する方がよいでしょうか (ビルダーには追加のオブジェクト作成が必要なため)。

また、equals() 生成と Commons Lang の EqualsBuilder についてどう思うか知りたいです。

さらに良い解決策があれば、それらも投稿してください:)

4

3 に答える 3

3

HashCodeBuilder、独自のハッシュ関数を記述するよりもはるかに遅くなります。リフレクションを使用して各フィールドを反復処理します。このメソッドを頻繁に呼び出すと、パフォーマンスが低下する可能性がありますが、状況によっては許容できる場合と許容できない場合があります。

eclipse によって生成されるhashCode関数は素数を使用して、より優れたハッシュ関数を作成します。hashCode で素数を使用する理由 それがなぜなのかについての詳細があります

于 2012-06-14T15:39:22.890 に答える
0

ここでは、パフォーマンスと保守性のどちらかを選択する必要があります。コモンズバージョンはクラスの変更に適応しますが、速度は遅くなります。Eclipseで生成されたバージョンは高速ですが、新しいフィールドを追加した後は更新されないため、保守が困難になります。

于 2012-06-16T14:03:13.857 に答える
0

HashCodeBuilder と EqualsBuilder はデフォルトのメソッドよりも優れていますが、パフォーマンスを重視する場合は、hashcode と equals メソッドを独自に作成することをお勧めします。これは、リフレクション アプローチを使用しているためです。

ルールは

等しいオブジェクトは同じハッシュコードを生成する必要があります。等しいハッシュコードはオブジェクトが等しいことを意味しません

于 2012-06-14T15:41:29.860 に答える