Java二分查找方法如何使用
发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,这篇文章主要介绍"Java二分查找方法如何使用",在日常操作中,相信很多人在Java二分查找方法如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java二分查找方
千家信息网最后更新 2025年02月03日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 static
int 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;
else
return mid; // key found
}
return -(low + 1); // key not found
}
如何测试效率?集合中放10万数据去测试下indexOf和binarySearch即可
public static void main(String[] args) {
List
list = 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安全错误
数据库的锁怎样保障安全
数据库设计的要求
ios软件开发怎么样
sql 查找新的数据库表
远程指导软件开发收费
p2p理财软件开发人员
网络安全公司的产业链
蚌埠医疗软件开发需要多少钱
思科网络技术优势
佛山汽车软件开发
服务器2008进入安全模式
商务咨询网络技术
mysql数据库的连接数
中电天津网络安全
服务器内存通道
国家网络安全宣传周文章
成都玖崟互联网科技有限公司住宿
漫谈网络安全预告
四川网络安全等保
杭州c语言软件开发定做
科技创新是 互联网
宜良上门软件开发
ibm服务器进不去管理口
网络安全技术高职进度计划
视频软件开发需要什么专业
退出华为账号 删除数据库
织梦如何重新安装数据库
朝帮网络技术有限公司
软件开发不要测试岗位
畅景互联云服务器
网络安全六个一的内容是什么