给出以下语句,取自this Oracle java教程,与类Collections的binarySearch()方法有关:
两个表单的返回值相同。如果列表包含 搜索键,返回其索引。如果不是,则返回值为 ( - (插入点) - 1),其中插入点是点 其值将插入List或索引中 第一个元素大于值或list.size()如果所有元素都在 列表小于指定值。
为什么binarySearch()
的返回值不仅仅返回负指数而不是负指数减1? (上面引用的粗体部分)。
简而言之:为什么(-(insertion point) - 1)
而不仅仅是(-(insertion point))
?
提前致谢。
答案 0 :(得分:17)
那是因为-(insertion point)
会模棱两可。您将无法区分以下内容:
0
位置找到的项目; 0
。使用-(insertion point) - 1
,上述两种情况会产生不同的返回值(0
和-1
)。
答案 1 :(得分:7)
来自您的链接
这个公认的丑陋公式保证当且仅当找到搜索关键字时,返回值将> = 0。基本上是将布尔(找到)和整数(索引)组合成单个int返回值
的黑客攻击