Java中如果你想在一个数组中去查找一个数值的位置,你可以去写for循环,但是Java中的Arrays类明明提供了一个方法,那么为何不用呢?
Arrays.binarySearch方法
Arrays.binarySearch(array, value);
Arrays.binarySearch(array, from_index, to_index, value);
这里Arrays.binarySearch方法中的数组array必须是从小到大排好序的,这点务必注意,因为其实这个方法是用二分算法实现的。如果你的数组并不是有序的,请先调用Arrays.sort方法对其进行排序,再去二分查找。
这里先说第一行的方法,就是在array数组中去找寻value值最后一次出现所在的索引位置。而如果array数组中根本没有value这个值,会返回一个负数。
再说第二个方法,其实就是加了个搜索的范围,即在array[from_index] ~ array[to_index - 1]中去找寻value值最后一次出现的索引位置,没有找到的话会返回一个负数。这里务必注意,范围是不包含array[to_index]的。
还有一点差点忘了说了,这里得提前导入Arrays类,即在开头写如下代码
import java.utl.Arrays;
代码
package base;
import java.util.Arrays;
public class Arrays_binarySearch
{
public static void main(String[] args)
{
int a[] = {0, 1, 1, 3, 3, 4, 4, 4, 6, 8}; // 这里a数组必须是有序的,否则无法使用binarySearch。
System.out.println(Arrays.binarySearch(a, 4));
System.out.println(Arrays.binarySearch(a, 5));
System.out.println(Arrays.binarySearch(a, 2, 5 + 1, 3));
System.out.println(Arrays.binarySearch(a, 2, 5 + 1, 8));
}
}