[转载] Java 中的binarySearch方法
参考链接: Java中的二分搜索binarySearch
Java提供了一个操作Set 、 List和Map等集合的工具类:Collections,该工具类里提供了大量方法对集合元素进行排序、查询和修改等操作,下面要说的就是查询操作中的binarySearch方法。
首先创建一个list集合,代码如下:
List<Integer> list = new ArrayList<>();
list.add(6);
list.add(1);
list.add(5);
list.add(3);
list.add(4);
list.add(2);
System.out.println(list);
输出结果如图:
1、binarySearch(List list, T key):使用二分搜索法搜索指定列表,第一个参数是列表,第二个参数是要查找的元素,返回的是要查找的元素的索引。只有排序后的List集合才可用二分法查询元素的索引,而且List集合的排序(升序或降序)要和binarySearch的排序(升序或降序)一致,不然返回的索引不准确。
例如:直接对这个列表使用binarySearch方法,查找元素3在这个集合中的索引位置。代码如下:
int intA = Collections.binarySearch(list, 3);
System.out.println("list集合:" + list);
System.out.println("3在集合中的索引位置:" + intA);
返回的索引不正确,结果如下:
但是在对列表进行升序排序之后,结果就不一样了:
Collections.sort(list); // sort()这个方法用来升序排序;
int intB = Collections.binarySearch(list, 3);
System.out.println("list集合:" + list);
System.out.println("3在集合中的索引位置:" + intB);
由于binarySearch方法默认的是升序排序,所以与列表的排序一致,返回的索引正确,结果如下,:
2、binarySearch(List list, T key,Comparator c):比上面多了一个参数,这个参数是用来自定义排序规则的,如果自定义了降序排序,则list集合也要降序排序,否则返回的索引不准确,要保证List集合的排序和binarySearch方法的排序一致。
Collections.reverse(list);// reverse()反转顺序,之前是升序则反转后是降序
System.out.println("list集合:" + list);
int a = Collections.binarySearch(list, 5, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
// 从大到小(即降序排序)
return o2 - o1;
}
});
返回的索引正确,结果如下:
[转载] Java 中的binarySearch方法相关推荐
- Java中的binarySearch方法
大家好,我是雄雄,今天我们来看看java中的binarySearch方法! 前言:我们都知道,如果我们想要在一个集合中查找某个元素所在的位置时,可以使用list类自带的indexOf方法,简单方便还快 ...
- java中的dispose函数_[转载]java中的dispose()方法
这是我第100篇IT技术文章,也正好让我实现了一个完整的从客户端输入参数,使用遗传算法计算生产排程的实例,前端由客户输入种群大小,遗传代数,交叉概率,变异概率,零件数,机器数,时间矩阵,机器矩阵,经运 ...
- [转载] Java中如何在方法中return返回多个值
参考链接: 用Java返回多个值 今天在学习Java,做编程题练练手的时候,看到了这一题. 本身题目难度不大,但是我在想题目要求返回两个值,return只能返回一个值,我该怎么来实现呢? 我想到了一 ...
- Java中的main()方法详解
源文作者:leizhimin 源文链接:http://lavasoft.blog.51cto.com/62575/53263 源文作者版权申明: 版权声明:原创作品,允许转载,转载时请务必以超链 ...
- 浅谈Java中的hashcode方法
哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: 1 public native int hashCode(); 根据 ...
- Java中的main方法
2019独角兽企业重金招聘Python工程师标准>>> 在一个Java应用程序中,通常程序的入口是一个main方法,它被声明为公有静态方法,参数是一个字符串数组,返回值为Void类型 ...
- Java中的析构方法finalize
Java中的析构方法finalize 在C++程序设计中有构造函数与析构函数的概念,并且是内存管理技术中相当重要的一部分,而在Java语言中只有构造器(也可以称为构造函数)的概念,却没有析构器或析构函 ...
- Java中的toString()方法
Java中的toString()方法 目录 Java中的toString()方法 1. 对象的toString方法 2. 基本类型的toString方法 3. 数组的toString ...
- JAVA中复制数组的方法
在JAVA里面,可以用复制语句"A=B"给基本类型的数据传递值,但是如果A,B是两个同类型的数组,复制就相当于将一个数组变量的引用传递给另一个数组;如果一个数组发生改变,那么 ...
最新文章
- 麦肯锡:优秀数据科学家的5个特征!
- 时代亿信 认证墙-SID强身份认证产品
- Python列表的用法和基本操作
- java : enum、创建文件和文件夹、删除文件和文件夹、获得项目绝对路径、写入数据到excel中、java代码中两种路径符号写法、读取、写入text文件...
- 高德地图 android 调用 amap.clear()后定位蓝点消失 如何重新显示定位
- php空间 数据库设计,php进阶之数据库设计/ 选择合适的表引擎
- 计算机网络 间接路由选择与直接路由选择
- html代码实现全国地图分布,echarts基于canvas中国地图省市地区介绍代码
- 基于51单片机+SYN6288语音播报
- 计算机英语课堂活动总结,英语活动总结(精选8篇)
- 程序员在国外:在加拿大IT公司工作三年的一些感受
- linuxpv操作实验_操作系统实验三:Linux进程管理及其扩展
- 【POJ】Radar Installation题解
- aspcms修改数据报错问题
- 菜单栏、工具栏、状态栏——QT
- C语言统考试卷一及答案,2017年《计算机应用基础》统考试题及答案
- 苹果手机怎么注册新Apple id帐户注册
- Syntactic sugar Syntactic salt
- NetInside可观测分析平台上线了
- 【图像超分辨率重建】——HAN论文精读笔记
热门文章
- 【mysql】期末数据库复习指南(《数据库系统概率》知识点总结,数据库系统原理,数据库设计课程复习)
- 管理系统统一鉴权服务器,确认服务器已启用密码鉴权
- c语言ole错误,错误 '8002801c' 访问 OLE 注册表的错误
- c#生成静态库_在 Blazor WebAssembly 静态网站中部署ML.NET机器学习模型
- 数据库实验6 数据库的分组查询和统计查询
- SQL注入漏洞(原理;网页注入)
- bzoj 1626: [Usaco2007 Dec]Building Roads 修建道路(最小生成树)
- X.509证书代码解析
- ZipKin原理学习(分布式实时数据追踪系统)+window部署zipkin+k8s部署zipkin
- 集总参数电路的判定——电源波长λ和元件尺寸L的比较