2016-10-11 8 views
-3

はのは、一例としてcontainsKey(Object key)を見てみましょう:キーがnullの場合Mapの実装でnullが異なるのはなぜですか?

  • のTreeMapは、NullPointerExceptionがスローされます。
  • キーのマッピングがない場合、TreeMapはfalseを返します。
  • HashMapはNullPointerExceptionをスローせず、nullを返しません。
+0

[ "この実装は、オプションのマップオペレーションをすべて提供し、null値およびnullキーを許容します"](https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html) –

+0

私は、それぞれのオブジェクトが異なる使用法と要件のために設計されていることを知りました。ところで、 "HashMapがキーのマッピングがない場合はfalseを返す"を追加するのを忘れてしまいました。 – reporter

+1

[マップ](https://docs.oracle.com/javase/8/docs/api/java/util/Map.html):「一部のマップ実装には、含まれる可能性のあるキーと値に制限があります。いくつかの実装ではnullのキーと値を禁止し、あるものはそのキーのタイプに制限があります。あなたの質問は、あなたが最初にドキュメントに入っていないことを示しています。 –

答えて

1

ただ、ドキュメントhereをお読みください。

一部のマップの実装は、彼らが 含むことがキーと値の制限があります。たとえば、nullキーと 値を禁止する実装もあれば、キーの種類に制限を持つ実装もあります。 資格のないキーまたは値を挿入しようとすると、チェックされていない 例外(通常NullPointerExceptionまたはClassCastException)がスローされます。 不適格なキーまたは値の存在を照会しようとすると、 が例外をスローするか、単にfalseを返すことがあります。いくつかの 実装は前の動作を示し、一部は 後者を表示します。

2

TreeSetのためのJavadocに見てましょう:

Throws NullPointerException - if the specified key is null and this map uses natural ordering, or its comparator does not permit null keys

意味:これら二つのマップの実装が本当に異なる意味を持っています。したがって、個々の "Map"メソッドの実装が異なって動作することは意味があります。

TreeSetの主な特性の1つは、の注文をサポートしていることです。それは、このように、ヌルがに来ている時に投げるために「公正」である、ヌルとうまく再生されません。

関連する問題