2

getScala のクラスのメソッドを呼び出すときにHashMap、キーが存在するかどうか (つまり、マップ内のキーが提供されたキーと等しいかどうか) を確認するために使用されるメソッドはどれですか? それですか、==それとも別のものですか?

Scala API はそれについて明確に述べていません:

「オプションで、キーに関連付けられた値を返します」

4

2 に答える 2

4

ハッシュ マップは、最初にハッシュ値をチェックし、次に ID をチェックします。だから「方法」は

key.hashCode == entry.hashCode && key == entry

(keyはテストしentryているアイテムであり、既にマップ内にあるアイテムです)。特に、メソッドscala.collection.immutable.HashMap内でまさにこのフォームを使用しますget(Scala バージョン 2.9 以降)。

したがって、identity の動作を変更したい場合は、hashCodeおよび ofをオーバーライドする必要がありますequals。また、既にマップにある項目のオーバーライドされた動作に依存することはできません。equal メソッドが呼び出されるのは、テストするものです。(しかし、一般に、どの equals メソッドが呼び出されるかについては保証されていないため、この動作に頼るべきではないことに注意してください。)

于 2012-05-29T19:50:17.967 に答える
0

def contains(key: A): Boolean

このマップにキーのバインディングが含まれているかどうかをテストします。

と:

def get(key: A): Option[B]

オプションで、キーに関連付けられた値を返します。

オプションの意味: ラップされた特定のキーに関連付けられた値を返すか、SomeそのNoneようなキーの値が存在しない場合。

于 2012-05-29T19:42:22.417 に答える