Arrays.binarySearch() 的用法

Arrays.binarySearch() 的用法

1.binarySearch(Object[] a, Object key)

Searches the specified array for the specified object using the binary search algorithm.

参数1:a是要查询的数组;参数2:key是要查询的关键字;返回值是key所在数组的索引值,如果没有找到就返回-1

注意:该数组必须是升序排列的

2.查看具体源代码:

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;

Comparable midVal = (Comparable)a[mid];

int cmp = midVal.compareTo(key);

if (cmp < 0)

low = mid + 1;

else if (cmp > 0)

high = mid - 1;

else

return mid; // key found

}

return -(low + 1);  // key not found.

}

3.自己写例子使用

import java.util.Random;

public class Test {

public static void main(String[] args) {

Object[] a = new Object[1000];

for(int i=0;i<a.length;i++){

Integer myint = i+1;

a[i]=myint;

}

Integer key = new Random().nextInt(a.length);

int keyindex = mybinarySearch0(a,0,a.length,key);

if(keyindex>=0)

System.out.println("找到的key:"+a[keyindex]);

}

private static int mybinarySearch0(Object[] a, int fromIndex, int toIndex,

Object key) {

int low = fromIndex;

int high = toIndex - 1;

//这也是为什么数组必须升序排列的

while (low <= high) {

//>>> 无符号右移,高位补0,这里相当于/2

int mid = (low + high) >>> 1;

Comparable midVal = (Comparable) a[mid];

int cmp = midVal.compareTo(key);

System.out.println(midVal+".compareTo("+(key)+")");

if (cmp < 0)

low = mid + 1;

else if (cmp > 0)

high = mid - 1;

else

return mid; // key found

}

return -(low + 1); // key not found.

}

}

4.运行结果

时间: 2024-08-02 14:22:02

Arrays.binarySearch() 的用法的相关文章

java 用Arrays.binarySearch解读 快速定位数字范围

在一些时候,需要用给一个数字找到适合的区间,Arrays.binarySearch可达到这个目的. static int binarySearch(int[] a, int key)           Searches the specified array of ints for the specified value using the binary search algorithm. import java.util.Arrays; public class Test { public 

JAVA Arrays.binarySearch

转自:http://blog.csdn.net/somebodydie/article/details/8229343 package com.jaky; import java.util.*; public class Quest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String[] colors = {"blue",&qu

Java基础(38)Arrays.binarySearch方法

1.源码中可以看到,binarySearch方法调用了binarySearch0方法,binarySearch0方法才是标准的二分查找实现. 2.对于binarySearch0方法来说,注意最后的return语句return -(low + 1); // key not found.,也就是说,在没有发现要查找的key的时候,返回的是负的插入点值,所谓插入点值就是第一个比key大的元素在数组中的索引,而且这个索引是从1开始的. 例如:有数组{4,6,10,21,25,95} 分别执行下面的查询操

Arrays.binarySearch的返回值

如果查找的值包含在数组中,返回搜索的第一个值的下标: 如果查找的值不在数组中,返回(-插入点-1):插入点即为第一个大于此查找值的元素下标 插入点 为将该值插入数组的那一点:即第一个大于此键的元素下标,如果数组中的所有元素都小于指定的值,则为 arr.length exp: int[] arr= {0,0,0}; System.out.println(Arrays.binarySearch(arr, 1));//-4 注:binarySearch使用前需要对数组进行排序 原文地址:https:/

Arrays.asList的用法:

Arrays.asList 返回数组而非List. List的一个典型的特性就是其长度是可变的,我们可以很方便地对它进行插入和删除元素的操作,这是它与数组所存在的一个很大的区别,后者的长度是固定的,而且我们不能从数组中删除元素,只能修改元素的值. 利用Arrays.asList(array)返回一个List,然而这个返回的是只读的List不支持add和remove的操作. JDK文档是这么说的: public static <T> List<T> asList(T... a) 返回

Arrays.asList的用法

使用工具类Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法,它的add/remove/clear方法会抛出UnsupportOperationException异常说明:asList的返回对象是一个Arrays内部类,并没有实现集合的修改方法.Arrays.asList体现的是适配器模式,只是转换接口,后台的数据仍是数组.String[] str = new String[]{"1","2"};List list = Arrays.as

java Arrays.asList的用法

import java.util.Arrays; import java.util.List; /** * * 本类演示了Arrays类中的asList方法 * 通过四个段落来演示,体现出了该方法的相关特性. * * (1) 该方法对于基本数据类型的数组支持并不好,当数组是基本数据类型时不建议使用 * (2) 当使用asList()方法时,数组就和列表链接在一起了. *     当更新其中之一时,另一个将自动获得更新. *     注意:仅仅针对对象数组类型,基本数据类型数组不具备该特性 * (

【转】java.util.Arrays.asList 的用法

DK 1.4对java.util.Arrays.asList的定义,函数参数是Object[].所以,在1.4中asList()并不支持基本类型的数组作参数. JDK 1.5中,java.util.Arrays.asList的定义,函数参数是Varargs, 采用了泛型实现.同时由于autoboxing的支持,使得可以支持对象数组以及基本类型数组. 不过在使用时,当传入基本数据类型的数组时,会出现小问题,会把传入的数组整个当作返回的List中的第一个元素,例如: public static vo

Arrays.toString() 的用法

在做项目的时候很想看一下数组里面具体放的数据,于是我直接打印了数组,但是结果是输出的居然是数组的地址,咕~~(╯﹏╰)b 于是查了一下,怎样才能将数组输出,找到了Arrays.toString() ,下面是在Arrays类里面这个方法的具体实现方法,我们不用管具体是怎么实现的,只要会使用就可以啦. public class MaoPao2 { public static void main(String[] args) { int[] nums = {76, 23, 9, 8, 88}; for