今天遇到一个问题,是根据数组中的某一个元素查找其在数组中的位置。我们知道,二分法或快速查找法肯定能解决问题,但是我又不想多写几行代码(好懒),所以就想知道有没有封装好的方法能解决这个问题。
通过查找资料了解到,Arrays提供了一个方便查询的方法 :Arrays.binarySearch();
- String[] arrays = new String[]{"a","b","c","d","e","f","g","h","i","j",};
- int positon = Arrays.binarySearch(arrays, "f");
-
- System.out.println("position is:"+positon);
测试结果:
- position is:5
其实这个方法也是用的二分法实现的:
- public static int binarySearch(char[] array, int startIndex, int endIndex, char value) {
- checkBinarySearchBounds(startIndex, endIndex, array.length);
- int lo = startIndex;
- int hi = endIndex - 1;
- while (lo <= hi) {
- int mid = (lo + hi) >>> 1;//无符号右移
- char midVal = array[mid];
- if (midVal < value) {
- lo = mid + 1;
- } else if (midVal > value) {
- hi = mid - 1;
- } else {
- return mid; // value found
- }
- }
- return ~lo; // value not present
- }