java中Arrays類中,binarySearch()方法的返回值問題


最近在復習Java知識,發現果然不經常使用忘得非常快。。。

看到binarySearch()方法的使用時,發現書上有點錯誤,於是就自己上機實驗了一下,最后總結一下該方法的返回值。

 

總結:binarySearch()方法的返回值為:1、如果找到關鍵字,則返回值為關鍵字在數組中的位置索引,且索引從0開始2、如果沒有找到關鍵字,返回值為負的插入點值,所謂插入點值就是第一個比關鍵字大的元素在數組中的位置索引,而且這個位置索引從1開始。

注意:調用binarySearch()方法前要先調用sort方法對數組進行排序,否則得出的返回值不定,這時二分搜索算法決定的。

下面看一個程序實例

package main_package;

import java.util.Arrays;

public class test {
	public static void main(String[] args)
	{
		int[]b=new int[]{4,25,10,95,06,21};
		System.out.println("原數組為:");
		for(int dim1:b)
		{
			System.out.print(""+dim1+" ");
		}
		Arrays.sort(b);
		System.out.println("排序后為:");
		for(int x:b)
		{
			System.out.print(x+" ");
		}
		System.out.println();
		int index=Arrays.binarySearch(b, 2);
		System.out.println("關鍵字2的返回值為:"+index);
		
		index=Arrays.binarySearch(b, 20);
		System.out.println("關鍵字20的返回值為:"+index);
		
	    index=Arrays.binarySearch(b, 30);
		System.out.println("關鍵字30的返回值為:"+index);
		
		index=Arrays.binarySearch(b, 100);
		System.out.println("關鍵字100的返回值為:"+index);
		
		index=Arrays.binarySearch(b, 10);
		System.out.println("關鍵字10的返回值為:"+index);
	}
}

  

  程序結果為:

 

可以看到 關鍵字2並沒有在數組中,而且2比數組中的任何一個元素都小,所以其插入點的值應為元素4的位置也就是1(沒有找到關鍵字從1開始

關鍵字20也不在數組中,數組中第一個比20大的數是21,所以20的插入點值為4(沒用找到關鍵字從索引從1開始

關鍵字100也不在數組中,而且100比數組中所有的元素都大,此時插入點值為length+1 為7(沒有找到關鍵字索引從1開始

關鍵字10在數組中,所以返回其在數組中的索引為2(找到關鍵字索引從0開始

 

之所以計算插入點值時索引要從1開始算,是因為-0=0,如果從0開始算,那么上面例子中關鍵字2和關鍵字4的返回值就一樣了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM