getScala のクラスのメソッドを呼び出すときにHashMap、キーが存在するかどうか (つまり、マップ内のキーが提供されたキーと等しいかどうか) を確認するために使用されるメソッドはどれですか? それですか、==それとも別のものですか?
Scala API はそれについて明確に述べていません:
「オプションで、キーに関連付けられた値を返します」
getScala のクラスのメソッドを呼び出すときにHashMap、キーが存在するかどうか (つまり、マップ内のキーが提供されたキーと等しいかどうか) を確認するために使用されるメソッドはどれですか? それですか、==それとも別のものですか?
Scala API はそれについて明確に述べていません:
「オプションで、キーに関連付けられた値を返します」
ハッシュ マップは、最初にハッシュ値をチェックし、次に ID をチェックします。だから「方法」は
key.hashCode == entry.hashCode && key == entry
(keyはテストしentryているアイテムであり、既にマップ内にあるアイテムです)。特に、メソッドscala.collection.immutable.HashMap内でまさにこのフォームを使用しますget(Scala バージョン 2.9 以降)。
したがって、identity の動作を変更したい場合は、hashCodeおよび ofをオーバーライドする必要がありますequals。また、既にマップにある項目のオーバーライドされた動作に依存することはできません。equal メソッドが呼び出されるのは、テストするものです。(しかし、一般に、どの equals メソッドが呼び出されるかについては保証されていないため、この動作に頼るべきではないことに注意してください。)
def contains(key: A): Booleanこのマップにキーのバインディングが含まれているかどうかをテストします。
と:
def get(key: A): Option[B]オプションで、キーに関連付けられた値を返します。
オプションの意味: ラップされた特定のキーに関連付けられた値を返すか、SomeそのNoneようなキーの値が存在しない場合。