当前位置: 首页 > news >正文

如何在Java中使用Arrays.binarySearch查找

在Java中,Arrays.binarySearch 这是一种有效的方法,可以在已排序的数组中找到指定的元素。采用二分搜索算法,时间复杂度为 O(log n),但前提是数组必须排序,否则结果是不可预测的。

1. 基本用法

调用 Arrays.binarySearch 最常见的形式如下:

int index = Arrays.binarySearch(array, key);

其中:

  • array:已排序的一维数组
  • key:要查找的值
  • index:返回目标值的索引(从0开始),如果找不到,返回负值

例如:

立即学习“Java免费学习笔记(深入);

import java.util.Arrays; <p>public class BinarySearchExample { public static void main(String[] args) { int[] nums = {1, 3, 5, 7, 9}; int index = Arrays.binarySearch(nums, 5); System.out.println("索引: " + index); // 输出: 2 } }</p>

2. 处理未发现的情况

若目标元素不在数组中,binarySearch 返回负数表示“插入点”——即如果要保持数组有序,则应插入元素的位置。

返回值的计算方法为:-(插入点) - 1

例如:

int index = Arrays.binarySearch(nums, 6); System.out.println(index); // 输出: -4 // 表示 6 索引中应插入 3 位置(因为 -(3) -1 = -4)

3. 搜索部分数组

可指定搜索范围:

int index = Arrays.binarySearch(array, fromIndex, toIndex, key);

注意:toIndex **不包括**,类似于左闭右开区间 [fromIndex, toIndex)

示例:

int[] arr = {1, 2, 3, 4, 5, 6}; int result = Arrays.binarySearch(arr, 1, 4, 3); // 在 [2,3,4] 中查找 3 System.out.println(result); // 输出: 2(索引与原数组相比)

4. 支持的数据类型

Arrays.binarySearch 支持所有基本类型的数组(int、double、char 等)以及对象数组。

对于对象数组,元素必须实现 Comparable 接口,或配合使用 Comparator:

String[] words = {"apple", "banana", "cherry"}; Arrays.sort(words); // 确保有序 int idx = Arrays.binarySearch(words, "banana");

自定义比较器示例:

Arrays.binarySearch(words, "Banana", String.CASE_INSENSITIVE_ORDER);

基本上就是这些。使用前记得排序,理解返回值的含义,正确使用。 binarySearch 了。


http://www.jsqmd.com/news/530261/

相关文章:

  • ChatGPT O3优化实战:如何提升大模型推理效率的工程实践
  • 【Spring Boot】 SpringBoot自动装配-Condition
  • Windows驱动管理终极指南:用Driver Store Explorer轻松释放数十GB系统空间
  • Ostrakon-VL-8B企业级落地:支持批量图片上传、异步处理与结构化导出
  • Langgragh 19. Skills 4. SkillToolset 式设计 —— 工具化按需加载的 Skills(含代码示例)
  • Chord效果展示:多只飞鸟同时追踪与运动轨迹分析,时空定位超精准
  • translategemma-4b-it行业落地:跨境电商客服图文实时翻译系统部署实录
  • 终极指南:如何在Zotero中快速预览PDF附件并提升文献管理效率
  • 文本相似度计算指南:用余弦距离和欧式距离搞定NLP任务(附Python代码)
  • 论文通关密码:Paperxie 四大降重模块如何破解知网 / 维普检测困局
  • 英威腾变频器200A-022G驱动电路板维修图纸 英威腾变频器200A-022G驱动电路板维修图纸
  • OpenDataLoader PDF - 高效的PDF解析器,让AI更轻松获取数据!
  • SeqGPT-560M政务招标文件:招标人/代理机构/投标截止/开标时间识别
  • Youtu-2B与其他2B模型对比:通义千问mini版评测
  • postgresql WAL文件大小
  • 3个高效步骤:微信聊天记录完整备份与导出解决iOS数据留存难题
  • 如何在Java中实现成绩分析小程序
  • EVA-01开源大模型教程:Qwen2.5-VL-7B视觉编码器特征图可视化与调试技巧
  • Qwen3-TTS-Tokenizer-12Hz开箱即用:Web UI支持中文语音提示与操作引导
  • 基于模糊PID桥式起重机防摇控制设计 基于模糊PID桥式起重机防摇控制设计 1.基本内容
  • Switch NAND管理终极指南:NxNandManager让你的Switch数据安全无忧
  • 在树莓派4B(Ubuntu 22.04)上从源码编译FISCO BCOS 2.11.0:一个ARM开发者的踩坑实录
  • 历史事件因果推演:DeepSeek-R1时间线建模尝试
  • Onekey:如何快速获取Steam清单文件的完整指南
  • 咱直接上硬菜,一个西门子1200控5轴的工业项目,搭台达B2伺服+威纶通屏,整套从PLC程序到电气图、屏程序全齐,模块化做得飞起,分享点实打实的操作细节
  • DeepSeek-R1-Distill-Qwen-1.5B一键部署:脚本自动化启动服务教程
  • 避坑指南:鲁班猫4 Ubuntu系统下,I2C驱动OLED并设置开机自启的完整流程与常见问题
  • doctl性能优化:如何快速执行复杂API操作
  • 从Eclipse到μVision:拆解CCS和Keil这两款IDE,为何一个‘重’一个‘轻’?
  • 环保储水罐直销哪家好?2026年推荐这些厂家,市场有名的环保储水罐推荐技术引领与行业解决方案解析 - 品牌推荐师