`
aty
  • 浏览: 36531 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Arrays.binarySearch()

阅读更多

      最近做1个OJ题目,其中有一步这样的操作:给定一个排序好的数组,随意给定一个数据,寻找数组中第一个大于或等于该值的数据在数组中的索引。如{1,4,5,10}, 给定4,应该返回的索引是1;给定6应该返回的索引是3

 

     刚开始我用的是直接从前到后扫描一遍这种最原始的方法,跑junit用例的时候,发现此处存在性能瓶颈。最后使用了jdk中自带的二分搜索,满足了性能要求。呵呵,二分查找确实很快。下面附上Arrays.binarySearch()的JDk源代码

/**
	 * 
	 * @param a          已经排好序的数组
	 * @param fromIndex  搜索范围的起始位置(包含)
	 * @param toIndex    搜索范围的结束位置(不包含)
	 * @param key        需要查询的关键字
	 * @return
	 *        如果key包含在数组中,则返回对应的数组索引;
	 *        否则返回 (-(插入点) - 1).
	 *        
	 * 插入点 被定义为将键插入数组的那一点:即第一个大于此键的元素索引,如果数组中的所有元素都小于指定的键,则为 a.length
	 */
    private static int binarySearch(int[] a, int fromIndex, int toIndex,int key) 
    {
    	int low = fromIndex;
    	int high = toIndex - 1;

    	while (low <= high)
    	{
    		//int mid = (low + high) / 2;
    		//System.out.println((2+7) >>> 1);//4
    		//System.out.println((2+5) >>> 1);//3
		    int mid = (low + high) >>> 1;
		    
		    int midVal = a[mid];
		    if (midVal < key)
		    {
		    	low = mid + 1;
		    }
		    else if (midVal > key)
		    {
		    	high = mid - 1;
		    }
		    else
		    {
		    	return mid; // key found
		    }
    	}
	
    	return -(low + 1);  // key not found.
    }

 

       其实JDK的api提供了很多工具方法,学会之后,能够提高我们对java语言的熟悉程度和算法能力,毕竟JDK的算法,大部分性能还是很高的

分享到:
评论

相关推荐

    你清楚Arrays.binarySearch()方法的返回值吗?

    在Java编程语言中,`Arrays`类是Java.util包下的一个非常重要的工具类,它提供了大量用于操作数组的静态方法,其中包括我们今天要讨论的`binarySearch()`方法。`Arrays.binarySearch()`方法允许我们在有序数组中查找...

    java的Arrays类的应用.doc

    例如,`Arrays.binarySearch(array1, 3)`会返回元素3在`array1`中的位置,如果元素不存在,返回负数。 5. **数组克隆**: - `clone()`方法可以创建数组的一个副本。在示例中,`array2 = array1.clone()`创建了`...

    java arrays类.docx

    int index = Arrays.binarySearch(array, 3); System.out.println("元素 3 的索引:" + index); // 复制数组 int[] copiedArray = Arrays.copyOf(array, 3); System.out.println(Arrays.toString(copiedArray)...

    JAVA中工具类Arrays和异常处理的实例操作.doc

    `Arrays.binarySearch()`方法可以实现高效的二分查找。这种方法要求数组事先已经排序。该方法返回查找元素在数组中的索引位置,如果未找到则返回负数。 **示例代码**: ```java System.out.println(Arrays.binary...

    Java binarysearch方法原理详解

    Java中的binarySearch方法是Java.util.Arrays类提供的一个静态方法,用于在数组中搜索指定的元素。该方法有两个用法,分别是搜索整个数组和搜索指定范围内的元素。 binarySearch(Object[], Object key)方法 该方法...

    Java实验-数组的定义、初始化方法 掌握数组的遍历方法 掌握Arryas类的使用

    * Arrays.binarySearch()方法可以在数组中查找元素,例如:Arrays.binarySearch(数组,元素); * Arrays.equals()方法可以比较两个数组是否相等,例如:Arrays.equals(数组1,数组2); 四、实验结果分析 * 实验...

    Arrays类常用方法.docx

    那么使用Arrays.binarySearch(intArray, 3)将会返回索引2,因为数组中的第三个元素是3。 3. Arrays.sort(数组名) sort() 方法可以对数组进行排序,排序方式可以是升序或降序。例如,如果我们有一个int类型的数组...

    Java.binarySearch.docx

    在Java编程语言中,`binarySearch()`方法是`java.util.Arrays`类的一个静态方法,它采用二分查找算法来高效地在有序数组中查找指定的元素。二分查找是一种在有序数据集合中寻找目标值的算法,其效率远高于线性搜索。...

    java实例-数组(学习资料)

    在这个例子中,`Arrays.binarySearch(array, 2)`返回了元素2在排序后的数组中的索引位置,结果是5,因为元素2在排序后的数组中位于第五个位置。 接着,我们学习如何向数组中添加元素。`insertElement()`方法接收...

    BinarySearch:binarySearch

    在这个例子中,`Arrays.sort()`方法首先对数组进行排序,然后`Arrays.binarySearch()`会返回"cherry"在数组中的索引。如果未找到目标元素,`binarySearch()`会返回一个负数,该负数的绝对值是目标元素应插入的位置,...

    java中的Arrays这个工具类你真的会用吗(一文秒懂)

    int result = Arrays.binarySearch(arrays, 7); ``` 这个方法首先调用`binarySearch0`,内部实现包括两个步骤:确定查找范围并不断缩小查找区间,直到找到目标元素或确定不存在。如果找到目标元素,返回其索引;...

    Java JDK 6学习笔记——ppt简体版 第21章.ppt

    - **Arrays.binarySearch()方法**:这个方法提供了二分查找功能,可以在排序数组中查找指定元素,返回元素的索引或插入点。示例中查找85的位置: ```java int result = Arrays.binarySearch(arr1, 6, 9, 85); ``...

    java工具类-正则

    System.out.println(Arrays.binarySearch(arr, 5)); // 输出结果:2 System.out.println(Arrays.binarySearch(arr, 4)); // 输出结果:-3,表示没有找到该元素 ``` - **3. copyOfRange(int[] original, int from...

    数组与字符串.docx

    例如,`int position = Arrays.binarySearch(array, targetValue);` 查找目标值在数组中的位置。 #### 二、字符串的操作 字符串是字符序列的集合,Java中使用`String`类表示字符串。 1. **字符串的创建**: - ...

    Java语言基础入门教程 Java开发编程基础课程 第5章 数组 共8页.pptx

    查找数组中的某个元素可以通过遍历数组实现,也可以使用`Arrays.binarySearch()`方法(需要先排序)。 ```java int[] nums = {1, 2, 3, 5, 25}; Arrays.sort(nums); int index = Arrays.binarySearch(nums, 5); ``` ...

    在Java中如何高效的判断数组中是否包含某个元素Java开

    `Arrays.binarySearch()`方法可以实现这一点,但这需要确保数组已排序,否则结果可能不正确。 6. **使用Objects.equals()** - 当处理对象数组时,推荐使用`Objects.equals()`代替`==`,以处理可能的`null`值。例如...

    12道不错的数组例题

    - `Arrays.binarySearch()`方法可用于已排序数组的二分查找,返回元素的索引。如果数组未排序,先调用`Arrays.sort()`。 6. **数组复制与拷贝**: - `System.arraycopy()`方法用于复制数组的一部分或全部到另一个...

    Java实训教程 Java软件开发实战 Java类库 第4章 集合操作 共31页.pptx

    int index = java.util.Arrays.binarySearch(datas, (byte) 5); System.out.println(index); ``` - **填充**: - `fill()` 方法用于将数组的所有元素设置为特定的值,常用于初始化或重置数组。 - 示例代码: ...

Global site tag (gtag.js) - Google Analytics