我们在使用 Arrays.binarySearch() 的系列方法时要格外小心,对于sun提供的二分查找的方法本身并没有BUG,但是程序员在使用该方法的时候确容易忽略使用该方法的前提条件,即使程序员忽略了使用的前提sun也未给出任何的提醒和警告,程序都能正常编译,但是往往运行却达不到你预想的结果,废话少说直接上代码(大家可以先猜猜程序的输出结果):
Coding:
import java.util.Arrays; public class Demo { public static void main(String[] args) { int[] a = new int[] { 128, 129 }; int pos = Arrays.binarySearch(a, 128); System.out.println("Pos=" + pos); pos = Arrays.binarySearch(a, 129); System.out.println("Pos=" + pos); int[] b = new int[] { 129, 128 }; pos = Arrays.binarySearch(b, 128); System.out.println("Pos=" + pos); pos = Arrays.binarySearch(b, 129); System.out.println("Pos=" + pos); } }
输出结果:
Pos=0 Pos=1 Pos=-1 Pos=0
上面的输出结果是否让你觉得很意外?
其实问题出在对二分查找的前提忽略上(数组必须有序),其实说sun土也真土,说自己土自己也真土 ,不过我要是sun我就尽量做到不让程序员土,让程序员土了那就是系统的灾难,看似很简单的一个问题如果程序员在使用忽略了数组有序的问题的确容易出现问题而且还半天找不出问题出在什么地方,因为没有异常信息和任何的提示,其实sun也用心良苦,他的API文档上对这个方法的注释如下:
public static int binarySearch(int[] a, int key)
sort(int[])
方法)。如果没有对数组进行排序,则结果是不确定的。如果数组包含多个带有指定值的元素,则无法保证找到的是哪一个。
a
- 要搜索的数组 key
- 要搜索的值 哎!!!! 永远不要相信自己的直觉和代码对于程序员来说是非常非常重要的。
相关推荐
NULL 博文链接:https://128kj.iteye.com/blog/1747459
主要介绍了JAVA基于Arrays.sort()实现数组升序和降序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了Java中Arrays.asList()方法将数组作为列表时的一些差异的相关资料,需要的朋友可以参考下
Java Methods-Arrays.ppt
个人研究所得,包含对其内部jdk源码的分析。 同时会结合ArrayList中对该两个方法的调用做进一步说明。...总结一句话:在允许的情况下,尽量调用System.arraycopy方法,实在不行再调用Arrays.copyOf方法。
主要介绍了Java Arrays.sort和Collections.sort排序实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Apress.PHP.Arrays.Single.Multi-dimensional.Associative.and.Object.Arrays.in.PHP.7.1484225554.rar 最新书籍,精讲PHP数组,文字版PDF
主要介绍了Java Arrays.asList使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了深入理解java中Arrays.sort()的用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Arduino项目开发 Control_Arrays_Arrays.pdf Arduino项目开发 Control_Arrays_Arrays.pdf Arduino项目开发 Control_Arrays_Arrays.pdf Arduino项目开发 Control_Arrays_Arrays.pdf Arduino项目开发 Control_Arrays_...
在本篇文章里小编给大家分享的是关于Java中使用Arrays.asList初始化ArrayList的知识点内容,需要的朋友们参考下。
Gain an in-depth understanding of PHP 7 arrays. After a quick overview of PHP 7, each chapter concentrates on single, multi-dimensional, associative, and object arrays. PHP Arrays is a first of its ...
Antenna Arrays.pdf
本文主要对Arrays.asList方法进行总结。具有很好的参考价值,下面跟着小编一起来看下吧
在Java中,Arrays类是一个实用工具类,用于在数组上执行各种操作,包括排序、搜索、比较等。它提供了一组静态方法,以便在数组中进行常见的操作。下面是一个超级详细的介绍Java中Arrays类的常用方法和功能。
Using Java Arrays Chapter 5. Using Loops in Java Code Chapter 6. Encapsulating Data and Exposing Methods in Java Chapter 7. Using Java Methods to Communicate Chapter 8. Using Java Constructors ...
网络图片地址url集合arrays.xml文件
主要介绍了Java中的Arrays.sort()代码详解,涉及Arrays.sort()简单示例,策略模式,”super”的使用等相关内容,具有一定借鉴价值,需要的朋友可以参考下。
/** *Arrays提供数组操作的一系列实用方法 *1输出 *2排序 *3二分查找 *4复制 *5扩容 */
Java语言程序设计基础篇课后题答案-Chapter6Arrays.pdf