binarySearch メソッドを使用していて、要素が存在せず、-insertion_point でない場合に -(insertion_point - 1) が Collections.binarySearch によって返されるのはなぜですか? 負の理由はわかりますが、なぜ -1 なのですか?
2 に答える
負の 0 を持つことはできないからです。
がなかった場合の状況を検討してください-1
。要素がインデックス 0 で見つかった場合は、0 が返されます。要素が見つからなかったが挿入ポイントが 0 だった場合も、0 が返されます。この 2 つの状況をどのように区別できますか? の追加により、それぞれ と-1
を返すように0
なり-1
、区別できるようになりました。
そして、それは-(insertion point) - 1
あなたの質問が述べているものとは少し異なります。
ドキュメントには次のように記載されています。
戻り値
リストに含まれている場合は、検索キーのインデックス。それ以外の場合は、
(-(insertion point) - 1)
. 挿入ポイントは、キーがリストに挿入されるポイントとして定義されます: キーより大きい最初の要素のインデックス、またはlist.size()
リスト内のすべての要素が指定されたキーより小さい場合。これにより、キーが見つかった場合にのみ、戻り値が >= 0 になることが保証されることに注意してください。
重要な部分は、最後の文です。
これにより、キーが見つかった場合にのみ、戻り値が >= 0 になることが保証されることに注意してください。
効果がある場合は、から2 つの値が返されbinarySearch
、巧妙な方法で組み合わされています。項目が存在するかどうか (結果の符号によって)、および属する場所 (結果の大きさ) に関する情報を取得します。