4

binarySearch メソッドを使用していて、要素が存在せず、-insertion_point でない場合に -(insertion_point - 1) が Collections.binarySearch によって返されるのはなぜですか? 負の理由はわかりますが、なぜ -1 なのですか?

4

2 に答える 2

21

負の 0 を持つことはできないからです。

がなかった場合の状況を検討してください-1。要素がインデックス 0 で見つかった場合は、0 が返されます。要素が見つからなかったが挿入ポイントが 0 だった場合も、0 が返されます。この 2 つの状況をどのように区別できますか? の追加により、それぞれ と-1を返すように0なり-1、区別できるようになりました。

そして、それは-(insertion point) - 1あなたの質問が述べているものとは少し異なります。

于 2013-09-13T18:24:48.540 に答える
5

ドキュメントには次のように記載されています。

戻り値

リストに含まれている場合は、検索キーのインデックス。それ以外の場合は、(-(insertion point) - 1). 挿入ポイントは、キーがリストに挿入されるポイントとして定義されます: キーより大きい最初の要素のインデックス、またはlist.size()リスト内のすべての要素が指定されたキーより小さい場合。これにより、キーが見つかった場合にのみ、戻り値が >= 0 になることが保証されることに注意してください。

重要な部分は、最後の文です。

これにより、キーが見つかった場合にのみ、戻り値が >= 0 になることが保証されることに注意してください。

効果がある場合は、から2 つの値が返されbinarySearch、巧妙な方法で組み合わされています。項目が存在するかどうか (結果の符号によって)、および属する場所 (結果の大きさ) に関する情報を取得します。

于 2013-09-13T18:26:43.990 に答える