2019独角兽企业重金招聘Python工程师标准>>>

在对一个列表进行检索的时候,我们经常使用的是indexOf方法进行检索,而Collections工具类也提供了一个检索的方法binarySearch,是使用二分搜索法搜索指定的列表。今天我们就来对比下这两个检索方式。

测试的程序

在程序中,我们定义了一个往list里面添加五个元素,然后分别使用binarySearch和indexOf方法进行检索,大家觉得返回的结果会是什么呢?

可以看到indexOf返回的是第一个元素出现的下标值没错,但是看到binarySearch检索的值已经出现了乱七八糟的情况,跟要求检索的结果不一样,那么这是为什么呢?我们来看下API对这个方法的说明。

binarySearch的API说明

可以看到这边已经说明了在调用之前必须根据列表元素的自然顺序对列表进行升序排序。二分搜索法就是“折半折半再折半”的搜索方法,如果没有排序,那么就无法确定是在小区(比中间值小的区域)查找还是在大区(比中间值大的区域)中查找。那么问题清楚了,也就可以有解决方案了,使用Collections.sort排下序就可以解决问题了。

排序后的结果

所以总结来说indexOf使用起来没什么限制,如果用binarySearch的话需要对列表先进行排序(当然排序完也有个缺陷,为了查找元素对列表进行排序,改变了其他元素在列表的位置,在业务处理的是就比较容易出错。也可以使用拷贝成一个数组,再排序查找,不要去把原表排序,就不会影响了)。indexOf是采用遍历去查找的,binarySearch是使用二分法查找,在性能方面来说,特别是在数据量很大的时候,binarySearch是占优的。

转载于:https://my.oschina.net/u/2391658/blog/861752

indexOf和binarySearch的对比相关推荐

  1. binarySearch与IndexOf的那些事儿~

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

  2. Java中的binarySearch方法

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

  3. echarts3的简单实践(饼图、柱形图、折线图、地图+散点图)

    echarts3是向下兼容echarts2的,所以echarts2切换到echarts3基本无需改代码. 饼图.柱形图.折线图:用的echarts2的配置项,但是能正常显示 代码片段: [javasc ...

  4. js数组的findIndex和indexOf对比

    findIndex() 方法返回传入一个测试条件(函数)符合条件的数组第一个元素位置. findIndex() 方法为数组中的每个元素都调用一次函数执行: 当数组中的元素在测试条件时返回 true 时 ...

  5. 判断字符串中是否存在的几种方案:string.indexof、string.contains、list.contains、list.any几种方式效率对比...

    我们在做项目时,可能会遇到这样的需求,比如判断,1,2,3,33,22,123, 中是否存在,3,. var str=",1,2,3,33,22,123,"; 一般有几种方式: 1 ...

  6. js如何判断数组含有某值,in/includes/inArray/indexOf方案对比

    来源:http://newsn.com.cn/say/nodejs-inarray.html 发布于2018年08月24日   作者:苏南大叔    来源:程序如此灵动~在本文中,您将会看到:如何在j ...

  7. java containsany_判断字符串中是否存在的几种方案:string.indexof、string.contains、list.contains、list.any几种方式效率对比...

    我们在做项目时,可能会遇到这样的需求,比如判断,1,2,3,33,22,123, 中是否存在,3,. var str=",1,2,3,33,22,123,"; 一般有几种方式: 1 ...

  8. 对比java_java集合对比

    list与Set.Map区别及适用场景 1.List,Set都是继承自Collection接口,Map则不是 2.List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复, ...

  9. JS中集合对象(Array、Map、Set)及类数组对象的使用与对比

    JS中集合对象(Array.Map.Set)及类数组对象的使用与对比 在使用js编程的时候,常常会用到集合对象,集合对象其实是一种泛型,在js中没有明确的规定其内元素的类型,但在强类型语言譬如Java ...

最新文章

  1. python一点基础都没有的怎么办-为什么我会建议每个大学生都学一点python编程?...
  2. HTML5第一弹:彩虹爆炸图
  3. SAP License:FI学习笔记
  4. 【干货】大数据驱动的因果建模在滴滴的应用实践
  5. 一种保护应用程序的方法 模拟Windows PE加载器,从内存资源中加载DLL
  6. 《2019上半年网络工程师考试大纲》
  7. 三维错切变换矩阵_三维基本几何变换矩阵.PPT
  8. oracle10g没有行列转换函数的替代方法(转)
  9. 排坑·IPhoneIOS中不兼容正则中的断言匹配
  10. 软件测试之与大厂测试经理的问答
  11. 关于游戏手柄按键的设计
  12. 669-Server端如何感知客户端的状态
  13. containsAll和contains
  14. 【报告分享】德勤:2023中国消费者洞察与市场展望.pdf(附下载链接)
  15. git fetch批处理,遍历一个文件夹下的所有子目录,执行git fetch --all
  16. OS-实现一个RR调度算法
  17. 中国电信超 2 亿用户信息被卖,售价低至 0.01 元/条!个人信息安全何在?
  18. php去除字符串空格
  19. 地下城与勇士(DNF)诺斯玛尔副本(堕落的盗贼、“迷乱之村”哈穆林、血蝴蝶之舞、疑惑之村、痛苦之村列瑟芬)(童年的回忆)
  20. java中的大小写 String大写S

热门文章

  1. OpenCV:使用 随机森林与GBDT
  2. 样条表示---Bezier样条曲线
  3. for..in..遍历循环的简写模式
  4. linux -cpu
  5. Winform开发之ComboBox和ComboBoxEdit控件绑定key/value数据
  6. 20分钟打造你的Bootstrap站点
  7. ping不通win7、8解决方法以及nc后门的制作
  8. 很多想法、很多感慨。
  9. 免费下载思科CCNP 642-143考试题库
  10. 中小企业CRM评测-八百客