考虑以下代码。
List<Integer> list = new Random().ints(10,1,50).boxed().collect(Collectors.toList());
list.sort(Comparator.naturalOrder());
System.out.println(list);
System.out.print("Enter key :");
Scanner sc = new Scanner(System.in);
int key = sc.nextInt();
int ans = Collections.binarySearch(list, key);
String result = String.format("ans = %d, list.at(ans*-1) = %d , lower bond = %d , upper bound = %d ", ans,list.get(ans*-1),list.get(ans*-1 -2 ) ,
list.get(ans * -1 -1));
System.out.println(result);
我正在研究 Collections 类给出的 binarySearch 方法。当 key 不在列表中时,它会将这些奇怪的数字设为负数。我将它们映射到它们的下限和上限。我研究了几个例子并且总是做对了。
看到这个
对于我给它的每个输入,它都会在列表中返回正确的上限和下限。谁能给我解释一下?引擎盖内发生了什么?