Collections.binarySearch(列表,K键)澄清.Java的

Rol*_*all 7 java return binary-search

鉴于以下语句,取自 Oracle Java教程,与类Collections的binarySearch()方法有关:

两个表单的返回值相同.如果List包含搜索键,则返回其索引.如果不是,则返回值为 ( - (插入点) - 1),其中插入点是将值插入List的点,或者第一个元素的索引大于值或list.size ()如果List中的所有元素都小于指定值.

为什么返回值binarySearch()不仅仅返回负指数而不是负指数减1?(上面引用的粗体部分).

简而言之:为什么(-(insertion point) - 1)而不仅仅是(-(insertion point))

提前致谢.

NPE*_*NPE 18

那是因为-(insertion point)含糊不清.您将无法区分以下内容:

  • 在位置找到的项目0;
  • 找不到项目,插入点是0.

使用-(insertion point) - 1,上述两种情况会导致不同的返回值(0-1).


Nim*_*sky 7

从你的链接

这个公认的丑陋公式保证当且仅当找到搜索关键字时,返回值将> = 0.将布尔(找到)和整数(索引)组合成单个int返回值基本上是一种破解