2017-08-10 9 views
0

私はStringBuilderのハッシュセットを作成しました。ハッシュセット重複値の制御。 ArrayList indexOf(string_present_in_list)-1を返す

次のコードは、StringBuilderのはHashSetの中に存在していても「真」を返します。

if(!contains(sb_obj)) 
{ 
... 
} 

また、私はStringBuilderのののArrayListをしました。

以下のコードを返す "-1" のArrayListがobj含まれている場合でも:

if(arr.indexOf(obj)==-1) 
{ 
.... 
} 

なぜそのような行動を?

答えて

0

同じString値を持つ異なるStringBuilderオブジェクトを比較しているとします。

StringBuilderは、equalshashCodeのメソッドに優先しません。これにより、HashSetArrayListには、同一性を比較するObjectの実装が使用されます。異なるオブジェクトを比較しているので、それらは異なっています。

+0

私は理解しましたが、オーバーライドequalsメソッドの記述方法について少し詳しく説明できます。 – ttripdee

+0

はい、あなたの仮定は正確です。それは何が起こっている。助けてください – ttripdee

+0

@ttripdeeなぜあなたは 'StringBuilder'を使用する必要がありますか? 'String'を使用できませんか?これは拡張できないfinalクラスで、equalsとhashCodeをオーバーライドします。 – Oleg

0

StringBuilderオブジェクトを格納する代わりにStringを使用するか、そのオブジェクトを追加および検索しようとするたびにカスタムオブジェクトオーバーライドhashcodeおよびequalsメソッドを格納する場合は、Stringを使用してください。

hascodeとequalsメソッドのコンセプトを読んでください。インターネット上で多くの例が見つかります。

関連する問題