Arrays.binarySearch 详解

Arrays.binarySearch 详解

Arrays类的binarySearch()方法,可以使用二分搜索法来搜索指定的数组,以获得指定对象。该方法返回要搜索元素的索引值。务必注意:数组必须经过排序才可以使用此方法,否则返回下标显示不准。binarySearch()方法提供多种重载形式,用于满足各种类型数组的查找需要。下文主要介绍两个比较重要、常用的方法:

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

a: 要搜索的数组

key:要搜索的值

如果key在数组中,则返回搜索值的索引;否则返回-1或“-”(插入点)。插入点是索引键将要插入数组的那一点,即第一个大于该键的元素的索引。

技巧:

[1] 搜索值不是数组元素,且在数组范围内,从1开始计数,得“ - 插入点索引值”;

[2] 搜索值是数组元素,从0开始计数,得搜索值的索引值;

[3] 搜索值不是数组元素,且小于数组内元素,索引值为 – 1;

[4] 搜索值不是数组元素,且大于数组内元素,索引值为 – (length + 1);

示例:

import java.util.Arrays;public class ArraysBinarySearch {public static void main(String[] args) {int arr[] = new int[]{3, 5, 7, 9, 11, 13};Arrays.sort(arr);for (int i = 0; i < 17; i++) {System.out.println("数字【" + i + "】:" + Arrays.binarySearch(arr, i));}}
}
数字【0】:-1
数字【1】:-1
数字【2】:-1
数字【3】:0
数字【4】:-2
数字【5】:1
数字【6】:-3
数字【7】:2
数字【8】:-4
数字【9】:3
数字【10】:-5
数字【11】:4
数字【12】:-6
数字【13】:5
数字【14】:-7
数字【15】:-7
数字【16】:-7

2) binarySearch(Object[] a, int fromIndex, int toIndex, Object key)
a:要搜索的数组

fromIndex:指定范围的开始处索引(包含)

toIndex:指定范围的结束处索引(不包含)

key:要搜索的值

如果要搜索的元素key在指定的范围内,则返回搜索值的索引;否则返回-1或“-”(插入点)。

技巧:

[1] 该搜索键在范围内,但不是数组元素,由1开始计数,得“ - 插入点索引值”;

[2] 该搜索键在范围内,且是数组元素,由0开始计数,得搜索值的索引值;

[3] 该搜索键不在范围内,且小于范围(数组)内元素,返回–(fromIndex + 1);

[4] 该搜索键不在范围内,且大于范围(数组)内元素,返回 –(toIndex + 1)。

import java.util.Arrays;public class ArraysBinarySearch2 {public static void main(String[] args) {int arr[] = new int[]{3, 5, 7, 9, 11, 13};Arrays.sort(arr);for (int i = 0; i < 17; i++) {System.out.println("数字【" + i + "】:" + Arrays.binarySearch(arr, 1, 4, i));}}
}
数字【0】:-2
数字【1】:-2
数字【2】:-2
数字【3】:-2
数字【4】:-2
数字【5】:1
数字【6】:-3
数字【7】:2
数字【8】:-4
数字【9】:3
数字【10】:-5
数字【11】:-5
数字【12】:-5
数字【13】:-5
数字【14】:-5
数字【15】:-5
数字【16】:-5

分析:

fromIndex是1,toIndex是4,即范围内的数字是 5,7,9

比5小的数字,= –(fromIndex + 1) = -2

比9大的数字,= -(toIndex + 1) = -5

其实在范围内的数字,规律与不带索引的方法一样的处理方式,比如:

1)数字8不属于数组,但在范围内,且在插入索引4,所以索引从1开始计数,应该为-4。

2)数字7属于数组,所以索引从0开始计数,应该为2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/765346.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HDFS集群环境配置

环境如下三台服务器&#xff1a; 192.168.32.101 node1192.168.32.102 node2192.168.32.103 node3 一、Hadoop安装包下载&#xff0c;点此官网下载 二、Hadoop HDFS的角色包含&#xff1a; NameNode&#xff0c;主节点管理者DataNode&#xff0c;从节点工作者SecondaryNameN…

掌握Go语言:Go语言结构体进阶,探索高级特性与实用技巧(23)

Go语言中的结构体&#xff08;Struct&#xff09;除了基本的定义和使用外&#xff0c;还有一些高级用法&#xff0c;可以让我们更灵活地使用结构体。下面详细解释一些高级用法&#xff1a; 结构体嵌套 结构体可以嵌套在其他结构体中&#xff0c;形成更复杂的数据结构。这种嵌…

Linux 中使用ISO文件 作为yum源

Linux 中使用ISO文件 作为yum源 在Linux中&#xff0c;可以将ISO文件挂载为本地YUM源。以下是如何操作的步骤和示例代码&#xff1a; 挂载ISO文件到某个目录&#xff08;例如/mnt/iso&#xff09;&#xff1a; mkdir /mnt/cdrom mount -o loop /path/to/your.iso /mnt/cdrom…

【科普向】什么是数据湖架构

数据湖架构是一种用于存储和管理大规模数据的设计模式。它的核心思想是将各种类型和格式的数据以原始形式存储在一个集中的存储系统中&#xff0c;而不需要预先定义数据结构或模式。以下是我对数据湖架构的理解和相关经验&#xff1a; 1. 构建数据湖&#xff1a;构建数据湖需要…

React Native: could not connect to development server

问题&#xff1a; 运行模拟器错误&#xff1a;无法连接到开发服务器 原因分析&#xff1a; 1、确认模拟器连接状态&#xff0c;是连接成功的 查看进程的端口占用&#xff0c;也没问题 lsof -i tcp:8081 kill pid2、检查包服务器是否运行正常 连接真机进行调试发现真机是正常…

基于springboot+vue+Mysql的“智慧食堂”设计与实现

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

Python 如何优雅编写多进程读取文件代码

文章目录 1. 背景2. multiprocessing库介绍2.1 创建进程2.2 进程池2.3 进程间通信2.4 进程同步 3. 多进程读取文件代码 1. 背景 在读取文件时&#xff0c;希望能够利用 Python 的多进程并行读取多个文件。有时&#xff0c;我们是基于类去编写代码的&#xff0c;那么对于类的方…

Basic RNN

文章目录 回顾RNNRNN CellRNNCell的使用RNN的使用 RNN例子使用RNN Cell实现使用RNN实现 嵌入层 Embedding独热向量的缺点Embedding LSTMGRU(门控循环单元)练习 回顾 DNN&#xff08;全连接&#xff09;&#xff1a;和CNN相比&#xff0c;拥有巨大的参数量&#xff0c;CNN权重共…

游泳耳机哪个牌子好?强烈推荐这4大高性能款式!

在如今的科技时代&#xff0c;游泳耳机已经成为了许多游泳爱好者和运动员的必备装备。一款好的游泳耳机不仅可以让你在水中享受到美妙的音乐&#xff0c;还可以为你提供更好的训练体验。 &#xff08;下图是我测试过的一部分游泳耳机&#xff1a;&#xff09; 但在市场上众多的…

基于FPGA实现的UDP协议栈设计_汇总

基于FPGA实现的千兆以太网UDP协议栈设计&#xff08;汇总篇&#xff09; 1. MAC设计 2. IP层设计 3. ARP层设计 4. UDP层设计 5. ICMP层设计 6. 仲裁器设计 8. RGMII接口设计 9. 跨时钟域设计

公募基金公开市场数据基础分析实例

公募基金公开市场数据基础分析 公募基金公开市场数据基础分析示例代码1.1 公开市场数据表结构 字段 字段类型 含义 SecurityID SYMBOL 基金代码 FullName STRING 基金全称 Name STRING 基金简称 Management SYMBOL 基金公司 Type SYMBOL 基金类型 Custodian SYMBOL 托管人 Issu…

AI大模型在医疗领域的应用案例:自然语言处理与医疗文本分析

随着人工智能技术的快速发展&#xff0c;AI大模型在自然语言处理、图像识别、语音识别等领域的应用越来越广泛。在医疗领域&#xff0c;AI大模型的应用正在深刻改变着医疗实践&#xff0c;为患者和医生带来前所未有的便利。近期AI医疗的概念也比较火热&#xff0c;本文将聚焦于…

编程题:相同数字的积木游戏(Java)

题目描述 小华和小薇一起通过玩积木游戏学习数学。 他们有很多积木&#xff0c;每个积木块上都有一个数字&#xff0c;积木块上的数字可能相同。 小华随机拿一些积木挨着排成一排&#xff0c;请小薇找到这排积木中数字相同目所处位置最远的2块积木块&#xff0c;计算他们的…

css的border详解

CSS的border属性是一个简写属性&#xff0c;用于设置以下四个边框属性&#xff1a; border-width&#xff1a;定义边框的宽度。可以使用具体的像素值&#xff0c;或者使用预定义的关键字如thin、medium和thick。border-width不支持百分比值。默认情况下&#xff0c;边框的宽度是…

在线文本列表差集计算器

具体请前往&#xff1a;在线文本差集计算工具

system Verilog:clocking中定义信号为input和output的区别

在SystemVerilog中&#xff0c;clocking块用于定义时钟块&#xff0c;这通常用于描述时钟边缘和同步的输入/输出行为&#xff0c;特别是在测试平台和硬件接口描述中。 在下述两个代码示例中&#xff0c;主要区别在于a被定义为一个input还是output。 当a被定义为input时&#x…

云计算 3月22号 (mysql的主从复制)

一、MySQL-Replication&#xff08;主从复制&#xff09; 1.1、MySQL Replication 主从复制&#xff08;也称 AB 复制&#xff09;允许将来自一个MySQL数据库服务器&#xff08;主服务器&#xff09;的数据复制到一个或多个MySQL数据库服务器&#xff08;从服务器&#xff09;…

优化选址问题 | 基于禁忌搜索算法求解基站选址问题含Matlab源码

目录 问题代码问题 禁忌搜索算法(Tabu Search)是一种局部搜索算法的扩展,它通过引入一个禁忌列表来避免陷入局部最优解,并允许在一定程度上接受较差的解来跳出局部最优。在基站选址问题中,我们可以使用禁忌搜索算法来寻找满足覆盖要求且基站数量最少的选址方案。 以下是…

Allegro许可管理技巧

在数字化时代&#xff0c;软件许可管理对于企业的运营至关重要。然而&#xff0c;许多企业在实施软件管理过程中会遇到各种问题。Allegro许可管理作为一款高效、合规的管理工具&#xff0c;能够帮助企业解决常见的许可管理问题。本文将深入探讨Allegro许可管理中的实用技巧&…

活用C语言之宏定义应用大全

零、C语言宏定义知多少 C语言的编程过程中经常会用到宏定义,然而如果你只是使用宏定义做一些常量的定义,那么你不是OUT了就是C语言小白。 那么我们在编程过程中,宏定义都有哪些作用呢? 常量定义 可以作为功能代码的开关 防止头文件被重复包含 定义一些通用类型,防止因为…