HashSet
同一性(「参照が等しい」)ではなく、オブジェクトの等価性( ) を使用します。Object.equals
さらに、ハッシュ関数を使用しますHashSet
。Object.hashCode
残念ながら、これを「知る」には、ドキュメントを少し「読んで」、ハッシュがどのように実装されているかを知る必要があります。のドキュメントからHashSet.contains
:
このセットに指定された要素が含まれている場合は true を返します。より正式には、このセットに (o==null ? e==null : o.equals(e) )となる要素 e が含まれている場合にのみ true を返します。
より一般的なSet
ドキュメントには次のように記載されています。
重複する要素を含まないコレクション。より正式には、セットにはe1.equals(e2)のような要素 e1 と e2 のペアは含まれず、最大でも 1 つの null 要素が含まれます。その名前が示すように、このインターフェイスは数学的集合の抽象化をモデル化します。
などのごくわずかな例外を除いて、JavaIdentityHashMap
のデータ構造は同一性ではなく等価性で機能します。
したがって、質問に答えるために、HashSetは「文字列値」で機能します。
(この例は、文字列インターンのために特に誤解を招く可能性がありますが、逆が真でなくても同一性は等しいことを意味するため、上記は変わりません。)