Java基础(39)Arrays.binarySearch方法
生活随笔
收集整理的這篇文章主要介紹了
Java基础(39)Arrays.binarySearch方法
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1.源碼中可以看到,binarySearch方法調用了binarySearch0方法,binarySearch0方法才是標準的二分查找實現(xiàn)。
2.對于binarySearch0方法來說,注意最后的return語句return -(low + 1); // key not found.,也就是說,在沒有發(fā)現(xiàn)要查找的key的時候,返回的是負的插入點值,所謂插入點值就是第一個比key大的元素在數(shù)組中的索引,而且這個索引是從1開始的。
例如:有數(shù)組{4,6,10,21,25,95} 分別執(zhí)行下面的查詢操作: Arrays.binarySearch(b, 10); 返回2 (找到了關鍵字,索引從0開始) 如果找不到,就從第一個數(shù)開始,索引為1,那么插入點值為4(1),6(2),10(3),21(4),25(5),95(6) Arrays.binarySearch(b, 2); 返回-1 4的索引是1 Arrays.binarySearch(b, 20); 返回-4 21的索引是4 Arrays.binarySearch(b, 30); 返回-6 95的索引是6 Arrays.binarySearch(b, 100); 返回-7 100不在數(shù)組中,比所有元素都大,插入點值為b.length+1為7為什么要用-(low+1)呢,因為假如用-low的話,查找2和查找4的結果都是0,這樣就不對了。
3.調用binarySearch方法之前要先調用Arrays.sort方法對數(shù)組進行排序,否則得出的返回值不定。
public static int binarySearch(Object[] a, Object key) {return binarySearch0(a, 0, a.length, key);}// Like public version, but without range checks.private static int binarySearch0(Object[] a, int fromIndex, int toIndex,Object key) {int low = fromIndex;int high = toIndex - 1;while (low <= high) {int mid = (low + high) >>> 1;@SuppressWarnings("rawtypes")Comparable midVal = (Comparable)a[mid];@SuppressWarnings("unchecked")int cmp = midVal.compareTo(key);if (cmp < 0)low = mid + 1;else if (cmp > 0)high = mid - 1;elsereturn mid; // key found }return -(low + 1); // key not found.}?
轉載于:https://www.cnblogs.com/BigJunOba/p/9579952.html
總結
以上是生活随笔為你收集整理的Java基础(39)Arrays.binarySearch方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu chrome 无法从该网站
- 下一篇: mybatis学习(3)进阶