RandomAccess接口?*

查看源码我们发现实际上 RandomAccess 接口中什么都没有定义。所以,在我看来 RandomAccess 接口不过是一个标识罢了。标识什么? 标识实现这个接口的类具有随机访问功能。

在 binarySearch()方法中,它要判断传入的list 是否 RamdomAccess 的实例,如果,调用indexedBinarySearch()方法,如果不是,那么调用iteratorBinarySearch()方法

javapublic static <T>int binarySearch(List<? extends Comparable<? super T>> list, T key) {if (list instanceof RandomAccess || list.size()<BINARYSEARCH_THRESHOLD)return Collections.indexedBinarySearch(list, key);elsereturn Collections.iteratorBinarySearch(list, key);}

ArrayList 实现了 RandomAccess 接口, 而 LinkedList 没有实现。为什么呢?我觉得还是和底层数据结构有关!

ArrayList 底层是数组,而 LinkedList 底层是链表。数组天然支持随机访问,时间复杂度为 O(1),所以称为快速随机访问。链表需要遍历到特定位置才能访问特定位置的元素,时间复杂度为 O(n),所以不支持快速随机访问。

ArrayList 实现了 RandomAccess 接口,就表明了他具有快速随机访问功能。 RandomAccess 接口只是标识,并不是说 ArrayList 实现 RandomAccess 接口才具有快速随机访问功能的!

下面再总结一下 list 的遍历方式选择:

实现了 RandomAccess 接口的list,优先选择普通 for 循环 ,其次 foreach,
未实现 RandomAccess接口的list,优先选择iterator遍历(foreach遍历底层也是通过iterator实现的,),大size的数据,千万不要使用普通for循环。

**100道精品面试题领取地址,文章最底部:**https://blog.csdn.net/kaikeba/article/details/111594371

开课吧之Java常见面试题之RandomAccess接口相关推荐

  1. Java常见面试题,2021年及答案汇总

    Java常见面试题,2021年及答案汇总 其实,博主还整理了,更多大厂面试题,直接下载吧 下载链接:高清172份,累计 7701 页大厂面试题 PDF 1.什么是ThreadPoolExecutor? ...

  2. Java常见面试题及答案汇总

    面临金三银四黄金跳槽季,不光是很多在职人员跃跃欲试,也有很多大学生积极地加入到应聘行列.作为技术出身的我们,找工作的一大前提就是技术是否能过关.而对于Java程序员来说,至少是两关的面试,这首个关卡就 ...

  3. 2018常见的java面试题_2018新版Java常见面试题

    千锋西安Java编程培训班的老师总结了2018新版Java常见面试题,一起来看! 1.1.java基础 ●面向对象的特征:继承.封装.多态 继承[构造器.protected关键字.向上转型Java实现 ...

  4. 总结Java常见面试题和答案

    转载自  总结Java常见面试题和答案 int和Integer有什么区别?   答:int是java的原始数据类型,Integer是java为int提供的封装类,java为每个原始数据类型都提供了封装 ...

  5. java常见面试题及答案 1-10(基础篇)

    java常见面试题及答案 1.什么是Java虚拟机?为什么Java被称作是"平台无关的编程语言"? Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程.Java 源文件被 ...

  6. JAVA常见面试题及解答

    JAVA常见面试题及解答(精华)   1)transient和volatile是java关键字吗?(瞬联) 如果用transient声明一个实例变量,当对象存储时,它的值不需要维持.例如: class ...

  7. Java常见面试题 + 答案

    Java常见面试题 + 答案 一.Java 基础 二.容器 三.多线程 四.反射 五.对象拷贝 六.Java Web 七.异常 八.网络 九.设计模式 十.Spring / Spring MVC 十一 ...

  8. Java常见面试题(2)

    Java常见面试题(2) 面向对象的三个特征 谈谈你对多态的理解 多态的好处: 什么是Java程序的主类?应用程序和小程序的主类有何不同? 为什么Java里有基本数据类型和引用数据类型 值传递和引用传 ...

  9. Java常见面试题 Java面试必看 (一)

    本篇博客是本人收集网上Java相关的资料整理所得,仅供参考. 一.Java基础 1.JDK 和 JRE区别 JDK(Java Development Kit)是针对Java开发员的产品,是整个Java ...

最新文章

  1. 计算机应用主要设计到哪些方面,大学计算机应用基础教案设计.doc
  2. EasyNet.Solr架构
  3. easy connect 获取服务端配置信息失败_安装配置mysql
  4. 网页小图标Favicon
  5. linux中matlab,linux中Matlab编译m文件
  6. php 获取子类的方法名,php获取分类下的所有子类方法
  7. 枚举算法:试统计正整数n的阶层n!=1*2*...*n尾部连续零的个数。
  8. 马斯克又一个宏伟蓝图即将启动:卫星高速上网,没有中间商赚差价
  9. v4l2接口,结构图
  10. 电子签章系统解决方案
  11. 摄像头和机械臂的手眼标定
  12. [奇异吸引子]相关知识点
  13. 海康威视工业相机驱动下载地址
  14. 节日大全c语言程序,C语言 程序设计 节日查询及任务提醒系统-万年历.doc
  15. 2021 CCF大数据与计算智能大赛!
  16. oracle错误号提示ORA-
  17. overleaf模板导入后中文无法识别问题解决方案
  18. mysql 二叉树表设计_Mysql 索引模型 B+ 树详解
  19. 基本RC积分电路及原理分析
  20. matlab fromstream,matlab安装问题求助

热门文章

  1. [转载] 6.3 cmath--数学函数
  2. Swift调用微信支付宝SDK(Swift4.0)
  3. phpstrom 安装
  4. Linux中的nc测试端口是否开放
  5. hadoop深入学习之SequenceFile
  6. Oracle使用NLSSORT函数实现汉字的排序
  7. 如何从应用直接跳转AppStore 电话 短信 邮件
  8. iOS: AFNetworking手动配置(iOS7.1, AF2.2.4)
  9. 自动化登陆博客园脚本
  10. Struts1.x多文件上传问题