参考链接: 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方法相关推荐

  1. Java中的binarySearch方法

    大家好,我是雄雄,今天我们来看看java中的binarySearch方法! 前言:我们都知道,如果我们想要在一个集合中查找某个元素所在的位置时,可以使用list类自带的indexOf方法,简单方便还快 ...

  2. java中的dispose函数_[转载]java中的dispose()方法

    这是我第100篇IT技术文章,也正好让我实现了一个完整的从客户端输入参数,使用遗传算法计算生产排程的实例,前端由客户输入种群大小,遗传代数,交叉概率,变异概率,零件数,机器数,时间矩阵,机器矩阵,经运 ...

  3. [转载] Java中如何在方法中return返回多个值

    参考链接: 用Java返回多个值 今天在学习Java,做编程题练练手的时候,看到了这一题.  本身题目难度不大,但是我在想题目要求返回两个值,return只能返回一个值,我该怎么来实现呢? 我想到了一 ...

  4. Java中的main()方法详解

    源文作者:leizhimin    源文链接:http://lavasoft.blog.51cto.com/62575/53263 源文作者版权申明: 版权声明:原创作品,允许转载,转载时请务必以超链 ...

  5. 浅谈Java中的hashcode方法

    哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: 1 public native int hashCode(); 根据 ...

  6. Java中的main方法

    2019独角兽企业重金招聘Python工程师标准>>> 在一个Java应用程序中,通常程序的入口是一个main方法,它被声明为公有静态方法,参数是一个字符串数组,返回值为Void类型 ...

  7. Java中的析构方法finalize

    Java中的析构方法finalize 在C++程序设计中有构造函数与析构函数的概念,并且是内存管理技术中相当重要的一部分,而在Java语言中只有构造器(也可以称为构造函数)的概念,却没有析构器或析构函 ...

  8. Java中的toString()方法

    Java中的toString()方法 目录 Java中的toString()方法 1.    对象的toString方法 2.    基本类型的toString方法 3.    数组的toString ...

  9. JAVA中复制数组的方法

     在JAVA里面,可以用复制语句"A=B"给基本类型的数据传递值,但是如果A,B是两个同类型的数组,复制就相当于将一个数组变量的引用传递给另一个数组;如果一个数组发生改变,那么 ...

最新文章

  1. 麦肯锡:优秀数据科学家的5个特征!
  2. 时代亿信 认证墙-SID强身份认证产品
  3. Python列表的用法和基本操作
  4. java : enum、创建文件和文件夹、删除文件和文件夹、获得项目绝对路径、写入数据到excel中、java代码中两种路径符号写法、读取、写入text文件...
  5. 高德地图 android 调用 amap.clear()后定位蓝点消失 如何重新显示定位
  6. php空间 数据库设计,php进阶之数据库设计/ 选择合适的表引擎
  7. 计算机网络 间接路由选择与直接路由选择
  8. html代码实现全国地图分布,echarts基于canvas中国地图省市地区介绍代码
  9. 基于51单片机+SYN6288语音播报
  10. 计算机英语课堂活动总结,英语活动总结(精选8篇)
  11. 程序员在国外:在加拿大IT公司工作三年的一些感受
  12. linuxpv操作实验_操作系统实验三:Linux进程管理及其扩展
  13. 【POJ】Radar Installation题解
  14. aspcms修改数据报错问题
  15. 菜单栏、工具栏、状态栏——QT
  16. C语言统考试卷一及答案,2017年《计算机应用基础》统考试题及答案
  17. 苹果手机怎么注册新Apple id帐户注册
  18. Syntactic sugar Syntactic salt
  19. NetInside可观测分析平台上线了
  20. 【图像超分辨率重建】——HAN论文精读笔记

热门文章

  1. 【mysql】期末数据库复习指南(《数据库系统概率》知识点总结,数据库系统原理,数据库设计课程复习)
  2. 管理系统统一鉴权服务器,确认服务器已启用密码鉴权
  3. c语言ole错误,错误 '8002801c' 访问 OLE 注册表的错误
  4. c#生成静态库_在 Blazor WebAssembly 静态网站中部署ML.NET机器学习模型
  5. 数据库实验6 数据库的分组查询和统计查询
  6. SQL注入漏洞(原理;网页注入)
  7. bzoj 1626: [Usaco2007 Dec]Building Roads 修建道路(最小生成树)
  8. X.509证书代码解析
  9. ZipKin原理学习(分布式实时数据追踪系统)+window部署zipkin+k8s部署zipkin
  10. 集总参数电路的判定——电源波长λ和元件尺寸L的比较