Java二分查找方法如何使用
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章主要介绍"Java二分查找方法如何使用",在日常操作中,相信很多人在Java二分查找方法如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java二分查找方
千家信息网最后更新 2025年12月02日Java二分查找方法如何使用
这篇文章主要介绍"Java二分查找方法如何使用",在日常操作中,相信很多人在Java二分查找方法如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java二分查找方法如何使用"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
功能:排行榜
需求:按积分给前端返回一个有序集合,为0不显示,并给出当前用户排名位置
实现:
计算出所有用户(包含当前用户的)积分集合
过滤掉为0的,且按分数倒序排列,分数越高排名越前
再把当前用户信息找到,判断其在集合中的位置
方案一:List.indexOf(object)
源码
public int indexOf(Object o) { if (o == null) { for (int i = 0; i < size; i++) if (elementData[i]==null) return i; } else { for (int i = 0; i < size; i++) if (o.equals(elementData[i])) return i; } list不包含返回-1 return -1; }底层就是遍历判断元素相当则返回元素位置,下标从0开始,所以结果需要+1。
当前方案不能解决问题吗?
能,通过逻辑判断可不用contains判断是否在集合内。
能解决问题那二分查找哪来的?
第一:indexOf底层的遍历如果极端情况下,10000用户,恰好当前用户排在第10000个,那效率太低。
方案二 二分查找 Collections.binarySearch
Tuning parameters for algorithms 优化算法 public staticint binarySearch(List extends Comparable super T>> list, T key) { if (list instanceof RandomAccess || list.size()
阈值为5000
private static final int BINARYSEARCH_THRESHOLD = 5000;
二分查找源代码
private staticint indexedBinarySearch(List extends Comparable super T>> list, T key) {int low = 0;int high = list.size()-1;while (low <= high) {int mid = (low + high) >>> 1;Comparable super T> midVal = list.get(mid);int cmp = midVal.compareTo(key);if (cmp < 0)low = mid + 1;else if (cmp > 0)high = mid - 1;elsereturn mid; // key found}return -(low + 1); // key not found}
如何测试效率?集合中放10万数据去测试下indexOf和binarySearch即可
public static void main(String[] args) {Listlist = new ArrayList<>(); for (int i = 0; i < 100000; i++) {list.add(i);}long time = System.currentTimeMillis();list.indexOf(58645);System.out.println("indexOf耗时:");System.out.println(System.currentTimeMillis()-time);long binarySearchtime = System.currentTimeMillis();Collections.binarySearch(list,58645);System.out.println("二分查找耗时:");System.out.println(System.currentTimeMillis()-binarySearchtime);}indexOf耗时:13二分查找耗时:1
性能提升13倍
到此,关于"Java二分查找方法如何使用"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
用户
方法
学习
位置
方案
问题
元素
分数
底层
效率
更多
积分
帮助
测试
实用
有序
接下来
下标
不用
中放
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
gmod订阅服务器
网络安全工程师有多少钱
软件开发经理来年规划
江苏服务器多少钱一台
语音会议软件开发的服务机构
西湖论剑网络安全大会ppt
网页能打开游戏连接不到服务器
美能达用户认证开启外部服务器
网络安全技术与攻防
数据库中注入攻击
网络安全应急演练的情况类别
软件开发项目用什么网站找
软件开发维护
怎样用数据库打开无线网络
互联网服务器根被切断
数据库持续运维保障
服务器安全防护价格
腾讯云轻量应用服务器ip被封
数据库安全的措施
自动化做软件开发和硬件开发
隆德网站服务器
滴滴为什么网络安全
北京品质网络技术咨询
杭州钱皇网络技术有限公司
网络安全应急演练的情况类别
数据库服务器硬盘配置
安徽服务器虚拟化定制虚拟主机
政治手抄报网络安全
国家级二级数据库
福建有网络安全员学校吗