web-dev-qa-db-ja.com

TreeMapでnullキーが許可されないのはなぜですか?

Javaコレクションフレームワーク)の背後にある概念を理解しようとしていますが、この質問に出会いました-TreeMapでnullキーが許可されないのはなぜですか?

TreeMapにnullキーを追加しようとすると、NullPointerExceptionが発生します。

TreeMapの内部動作をグーグルしようとしましたが、TreeMapのような何かがRedBlackツリーアルゴリズムを使用していることを発見しました。これは、今のところ私には理解が難しく、私はそれに取り組んでいます。

TreeMapは、Red-BlackツリーベースのNavigableMap実装です。つまり、Red-Blackツリーアルゴリズムを使用してTreeMapオブジェクトキーをソートします。

Mapインターフェースの他の2つの実装ではnullをキーとして許可していますが、TreeMapではnullをキーとして追加できないのはなぜですか?

あらかじめご説明をお願い申し上げます。

8
Amol Patil

TreeMapはnullキーを許可します。デフォルト自然順序付けコンパレータは、例外をスローするコンパレータです。

_TreeMap.put_の documentation から:

NullPointerException-指定されたキーがnullであり、このマップが自然順序付けを使用している場合、またはそのコンパレータがnullキーを許可していない場合

Null値を許可する最も簡単な方法は、Comparator.nullsFirst(Comparator.naturalOrder())またはComparator.nullsLast(Comparator.naturalOrder())のようなコンパレータを使用してTreeMapを作成することです

23
kapex

Treemapはnullキーを許可しないという同じ印象を受けましたが、Java 6ツリーマップのnullキーを使用して最初の要素を追加できますが、Java 8そうではありません。

 Map<String, Date> productStartDatesBySourceProductID = new TreeMap<String, Date>();

enter image description here

0
Vicky