Java binarysearch方法原理详解

这篇文章主要介绍了Java binarysearch方法原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

首先 数组排序需要import java.util.Arrays类

binarysearch有两个用法,一个是在整个数组里搜索,一个是在指定范围搜索,其实都是差不多的,可以将前者视为后者的特殊情况。

用法1

binarySearch(Object[], Object key)

Object是目标数组,key是目标值,要求目标数组必须要经过排序的,否则无法找到正确的结果

查询无非就是两种结果,一种是目标值在目标数组里,另一种是不在

所以返回值也分为正负两种,目标值在目标数组内的,返回下标(如果有多个相同的,无法确定找到的是哪个,因为是二分搜索)

目标值不在数组内的,返回 -(第一个大于目标值的元素的下标+1),类似的,如果数组内的值都比目标值小,则是返回-(数组长度+1)

样例:

import java.util.Arrays;
public class number {
  public static void main(String[] args) {
  int a[] = new int[] {1, 3, 4, 6, 8, 9};
  int x1 = Arrays.binarySearch(a, 5);
  int x2 = Arrays.binarySearch(a, 4);
  int x3 = Arrays.binarySearch(a, 0);
  int x4 = Arrays.binarySearch(a, 10);
  System.out.println(x1+" "+x2+" "+x3+" "+x4);
  }
}

输出:

-4 2 -1 -7

也可以这么理解:

对应相应的位置输出即可。

用法2

binarySearch(Object[], int fromIndex, int toIndex, Object key)

加了两个int变量,代表区间的开始和结束,从fromindex(包含)到toindex(不包含)这个区间里面搜索,返回值和前面用法1类似,唯一有所不同的是,当如果区内的值都比目标值小,则是返回-(toindex+1),如果区间内的值都比目标值大,则返回-(fromindex+1),仔细想想不难理解,用法1就相当于fromindex为0且toindex为数组长度的用法2。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java合并list方法代码实例

    这篇文章主要介绍了java合并list方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 List包括List接口以及List接口的所有实现类.因为List接口实现了Collection接口,所以List接口拥有Collection接口提供的所有常用方法,又因为List是列表类型,所以List接口还提供了一些适合于自身的常用方法 方法一 List<Children> reduce = list.stream() .map(x ->

  • 浅谈java 重写equals方法的种种坑

    重写java object类的equals方法 覆盖equals方法请遵守约定 什么情况下要覆盖equals方法 容易违反的对称性 不易察觉的传递性 覆盖equals请遵守通用约定 似乎覆盖equals方法看起来似乎是一件平常甚至极其简单的事情, 但是有许多覆盖方式会导致错误,并且会表现出超出预期的行为, 而有可能数小时也无法找到错误的位置.(比如说把参数改成了非Object类型) 1. 类的每一个实例在本质上都是唯一的 ( 从内存的角度来讲是这样的),对于代表活动而不是值(value)的类来说

  • Java实现Word/Excel/TXT转PDF的方法

    引言: 前段时间公司做的教育系统,系统需要实时记录用户学习课程的情况和时间,所以对一些除视频课程之外,对一些文本文档型课件同样如此,初次的方案是讲office相关类型的文件进行转换Html文件,然后展示对应的html文件,PC端差不多没问题了,但是个别文件再转换html之后,样式出现了错乱,即时做了编码转换处理,但是还是有个别乱码,最后改变方案,最后统一将文件转为pdf,然后通过流的方式在前端展示,其中包括Word Excel PPT TXT PDF等文件,代码如下: 备注:本来是可以直接展示p

  • Java list利用遍历进行删除操作3种方法解析

    这篇文章主要介绍了Java list利用遍历进行删除操作3种方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Java三种遍历如何进行list的便利删除: 1.for循环: 常见初五写法:(由于下标问题达不到想要效果) for(int i=0;i<list.size();i++){ if(list.get(i).equals("del")) list.remove(i); } 应该改为:(倒序操作避免下标问题) int s

  • java数据结构之二分查找法 binarySearch的实例

    java数据结构之二分查找法 binarySearch的实例 折半查找法,前提是已经排好序的数组才可查找 实例代码: public class BinarySearch { int[] bArr; public void setArr(int[] bArr){ this.bArr=bArr; } public static void main(String[] args) { int arrLength=16; int[] bArr=new int[arrLength]; System.out.

  • Java通过URL获取公众号文章生成HTML的方法

    说明:通过公众号URL获取的内容,文字可以正常显示,但是图片存在跨域访问的问题,微信不允许跨域访问公众号图片,所以需要将公众号图片从存入本地后,再上传至OSS,然后把HTML中的图片全部替换为自己的OSS地址就可以了 这里就需要在后台对HTML进行DOM的解析,需要用的Jsoup <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId&g

  • Java枚举抽象方法实例解析

    这篇文章主要介绍了Java枚举抽象方法实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 需求背景 需求已经确定了几个固定的常量值,并且每个常量值都有相同的行为,但是具体实现细节不同.建议使用枚举抽象方法,优点:结构清晰,便于扩展. 枚举类实现抽象方法 与常规抽象类一样,enum类允许我们为其定义抽象方法,然后使每个枚举实例都实现该方法,以便产生不同的行为方式,注意abstract关键字对于枚举类来说并不是必须的,举个栗子: public

  • Spring 使用JavaConfig实现配置的方法步骤

    不使用Spring的XML配置,全权交给java来做! JavaConfig是Spring的一个子项目,在Spring4之后,它称为了Spring的核心功能! 实体类: package com.lrx.poji; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; //说明这个类被Spring注册到了容器中 @Component pu

  • 简述Java List去重五种方法

    前言 去重,对于很多场合必不可少.写此篇文章是因为在之前做某个画面中,我在数据库中进行 Distinct 和 Order By 去重,发现影响效率,故此在后台先做去重处理:所以记录此文,已做参考: Num1:使用java8新特性stream进行List去重 public static void main(String[] args) { List list = new ArrayList(); list.add(10); list.add(11); list.add(14); list.add(

  • Java binarysearch方法原理详解

    这篇文章主要介绍了Java binarysearch方法原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 首先 数组排序需要import java.util.Arrays类 binarysearch有两个用法,一个是在整个数组里搜索,一个是在指定范围搜索,其实都是差不多的,可以将前者视为后者的特殊情况. 用法1 binarySearch(Object[], Object key) Object是目标数组,key是目标值,要求目标数组必须要

  • Java getParameter方法案例详解

    html核心代码 <body> <font size = "5" color ="blue">圆面积计算</font><br> <form action = "home/CCarea" method = "post"> 请输入半径r:<input type="text" name = "radius" value = &q

  • 教你正确的Java扩展方法示例详解

    目录 引言 支持扩展方法的语言 C# Visual Basic Kotlin 主角登场 Lombok @ExtensionMethod Manifold 总结 引言 扩展方法能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型.扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用.对于用 C# 和 Visual Basic 编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法没有明显的差异. 支持扩展方法的语言 其实比较多的编程语言都支持了

  • JAVA构造函数(方法)示例详解

    目录  一.什么是构造函数 二.构造函数的特点 三.示例 四.默认构造函数 五.构造函数的重载 六.构造函数的使用 构造函数的特点 总结  一.什么是构造函数 Java构造函数,也叫构造方法,是JAVA中一种特殊的函数.与函数名相同,无返回值. 作用:一般用来初始化成员属性和成员方法的,即new对象产生后,就调用了对象的属性和方法. 在现实生活中,很多事物一出现,就天生具有某些属性和行为.比如人一出生,就有年龄.身高.体重.就会哭:汽车一出产,就有颜色.有外观.可以运行等. 这些,我们就可以将这

  • Java 继承方法实例详解

    继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类.继承可以理解为一个对象从另一个对象获取属性的过程. 如果类A是类B的父类,而类B是类C的父类,我们也称C是A的子类,类C是从类A继承而来的.在Java中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类 继承中最常使用的两个关键字是extends和implements. 这两个关键字的使用决定了一个对象和另一个对象是否是IS-A(是一个)关系. 通过使用这两个关键字,我们能实现一个对象获取另一个对象的属性. 所有Jav

  • 浅谈js中几种实用的跨域方法原理详解

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被当作是不同的域. 下表给出了相对http://store.company.com/dir/page.html同源检测的结果: 要解决跨域的问题,我们可以使用以下几种方法: 一.通过jsonp跨域 在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的.但是,在页面上引入不同

  • js中跨域方法原理详解

    框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被当作是不同的域. 下表给出了相对http://store.company.com/dir/page.html同源检测的结果: 要解决跨域的问题,我们可以使用以下几种方法: 一.通过jsonp跨域 在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的.但是,在页面上引入不同域上的js脚本文件却是可以的,jsonp正是利用这个特性来实现的. 比如,有个a.html页面,它里面的代码需要利用ajax获取一

  • java线程优先级原理详解

    java 中的线程优先级的范围是1-10,默认的优先级是5.10最高. MIN_PRIORITY 1 MAX_PRIORITY 10 NORM_PRIORITY 5 优先级高的获得cpu的几率更大些,不是优先级高的就先执行完,线程优先级随机特性 在java中,线程的优先级具有继承性,例如A线程启动B线程,则A和B的优先级是一样的 线程创建后,可通过调用setPriority()方法改变优先级. public class Test5 { public static class TheadT ext

  • Java Bigdecimal使用原理详解

    一般来说,一提到Java里面的商业计算,我们都知道不能用float和double,因为他们无法进行精确计算.但是Java的设计者给编程人员提供了一个很有用的类BigDecimal,他可以完善float和double类无法进行精确计算的缺憾. BigDecimal类位于java.maths类包下.首先我们来看下如何构造一个BigDecimal对象.它的构造函数很多,这里挑选最常用的两个来演示一下:一个就是BigDecimal(double val),另一个就是BigDecimal(String s

  • Python super()方法原理详解

    在学习 Python 类的时候,会碰见类中有 __init__() 这样一个函数,其实它就是 Python 的构造方法. 构造方法类似于类似 init() 这种初始化方法,来初始化新创建对象的状态,在一个对象创建后会立即调用,比如像实例化一个类: f = FooBar() f.init()#手动初始化 使用构造方法就能让它简化成如下形式:对象创建后自动调用魔法方法__init__(),对对象进行初始化操作 f = FooBar() 在明白了构造方法之后,来点进阶的问题,那就是父类的构造方法中的初

随机推荐