Java binarysearch方法原理详解

yizhihongxing

Java binarySearch方法原理详解

什么是binarySearch方法

binarySearch方法是Java Util API提供的的一个静态方法,用于在有序数组中二分查找指定的值。

binarySearch方法原理

binarySearch方法实际上是对比给定值与数组中间值的大小,如果给定值小于中间值,则继续在左半部分递归查找;如果大于,则在右半部分递归查找。这样每次查找的范围都会减半,最终定位到给定值所在的位置。

需要注意的是,这个方法仅适用于有序数组。如果数组是无序的,先要使用sort方法进行排序。

binarySearch方法的语法

public static int binarySearch(int[] arr, int key)
public static int binarySearch(int[] arr, int fromIndex, int toIndex, int key)

参数说明:

  • arr:指定的数组
  • key:要查找的值
  • fromIndex:要搜索的第一个元素的索引(包括)
  • toIndex:要搜索的最后一个元素的索引(不包括)

返回值:

  • 找到了指定元素,返回它的索引
  • 没有找到指定元素,返回负数,表示key应该插入到此位置以保证数组的有序性

binarySearch方法的使用

下面我们来看一下如何使用binarySearch方法:

int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int key = 6;
int index = Arrays.binarySearch(arr, key);
System.out.println("index:" + index); // 输出:index:5

上面的代码中,我们声明了一个有序的数组arr,然后查找其中的元素6,binarySearch方法返回了该元素的索引5。

接下来我们来看一个key不存在于数组中的例子:

int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int key = 20;
int index = Arrays.binarySearch(arr, key);
System.out.println("index:" + index); // 输出:index:-11

上面的代码中,我们查找不存在数组中的元素20,binarySearch方法返回了-11。这个返回值表示,如果要将元素20插入数组中,应该插入到第11个位置(从1开始),才能保证数组的有序性。

总结

binarySearch方法是一个非常高效的查找有序数组中的元素的方法。在使用时需要注意传入的数组必须是有序的。如果传入的数组是无序的,应首先使用sort方法对其进行排序。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java binarysearch方法原理详解 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • jsp+dao+bean+servlet(MVC模式)实现简单用户登录和注册页面

    这里是JSP+DAO+Bean+Servlet四个技术实现MVC模式的简单用户登录与注册的攻略。我们使用MySQL作为数据库。 1. 创建数据库表 首先我们需要创建两个表:用户表和用户信息表。 CREATE TABLE `t_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50…

    Java 2023年6月15日
    00
  • Java复制(拷贝)数组的五种方法汇总

    Java复制(拷贝)数组的五种方法汇总 一、使用for循环逐一复制 这是最基本的数组复制方法,适用于任何类型的数组。代码示例如下: int[] arr1 = {1, 2, 3, 4, 5}; int[] arr2 = new int[arr1.length]; // 创建空数组,长度等于原数组 for (int i = 0; i < arr1.leng…

    Java 2023年5月26日
    00
  • @RequestBody时第二个字母大写,映射不到的解决

    使用Spring MVC时,通常可以使用@RequestBody注解来接收HTTP请求的JSON数据,并将请求体转换为Java对象。但在实际使用过程中,有时会遇到使用@RequestBody时第二个字母大写时,映射不到的问题。这是因为Spring MVC默认情况下使用的是Jackson库来进行JSON转换,而Jackson库的命名策略默认是采用小写字母和下划…

    Java 2023年5月26日
    00
  • Tab切换组件(选项卡功能)实例代码

    下面是一个针对Tab切换组件(选项卡功能)实例代码的完整攻略,包含两个示例说明: Tab切换组件(选项卡功能)实例代码攻略 什么是Tab切换组件? Tab切换组件是一种常用的网页交互组件,它通常用于显示多个标签内容,用户可以通过点击不同标签来切换不同内容。常见的应用场景包括网页导航、商品分类、数据浏览等。 Tab切换组件的实现原理 Tab切换组件通常采用HT…

    Java 2023年6月15日
    00
  • Java实现两个随机数组合并进行排序的方法

    为了实现Java中两个随机数组合并的排序方法,我们可以分为以下步骤进行: 第一步 – 定义随机数组 在Java中,我们需要定义两个随机数组,并实现随机数生成器。以下是一个基于Java8的示例代码: import java.util.Random; public class RandomArrayGenerator { public int[] generat…

    Java 2023年5月26日
    00
  • 通过实例深入学习Java的Struts框架中的OGNL表达式使用

    让我来详细讲解一下“通过实例深入学习Java的Struts框架中的OGNL表达式使用”的完整攻略。 什么是Struts框架中的OGNL表达式? OGNL 表达式是 Object-Graph Navigation Language (对象图导航语言)的缩写,是在Struts框架中用于处理表达式语言的一种语言。通过OGNL表达式,我们可以访问对象的属性、方法和集…

    Java 2023年5月20日
    00
  • Java easyexcel使用教程之导出篇

    Java easyexcel使用教程之导出篇攻略 背景介绍 在实际开发中,经常会涉及到将数据导出为Excel文件的需求。而 EasyExcel 是一款由阿里巴巴开源的Java Excel解析/生成工具包,使用简单,支持大量数据导出,广受开发者喜欢。 本篇攻略主要针对EasyExcel的导出功能进行详细讲解,包括使用方法、参数配置和示例说明等内容。 使用方法 …

    Java 2023年6月2日
    00
  • MySQL实现分页查询的方法

    MySQL实现分页查询的方法可以通过limit关键字来实现。这个关键字可以在SQL语句中指定起始数据和需要返回的数据行数,从而实现分页的效果。 使用方法 使用limit关键字实现分页查询的语法如下: SELECT * FROM table_name LIMIT offset, count; 其中,offset表示查询的起始数据行位置,count表示需要返回的…

    Java 2023年6月16日
    00
合作推广
合作推广
分享本页
返回顶部