在研究Collections类的排序算法时候,看到这样的代码 :

public 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);
else
return Collections.iteratorBinarySearch(list, key);
}
BINARYSEARCH_THRESHOLD的值是5000. 代码的意思是list的大小少于5000或者list实现了RandomAccess, 就采用index的方式遍历, 反之就采用iterator的方式遍历. 这里注意到:
  list instanceof RandomAccess
查了一下JDK源码和文档, 发现RandomAccess是一个空的接口, 空接口一般只是作为一个标识, 如Serializable接口. JDK文档说明RandomAccess是一个标记接口(Marker interface), 被用于List接口的实现类, 表明这个实现类支持快速随机访问功能(如ArrayList). 当程序在遍历这中List的实现类时, 可以根据这个标识来选择更高效的遍历方式, 仅此而已. 总结: RandomAccess接口作为标记接口(Marker interface), 表明这个List实现类是否支持随机访问功能, 比如ArrayList就实现了RandomAccess接口而LinkedList类就没有实现RandomAccess接口.

最新文章

  1. Django--全文检索功能
  2. jquery trigger 触发事件小计 -- 关于a标签
  3. 可重入锁 &amp; 自旋锁 &amp; Java里的AtomicReference和CAS操作 &amp; Linux mutex不可重入
  4. VIm vi 使用 汇总
  5. PCB走线角度选择 — PCB Layout 跳坑指南
  6. Xcode的后缀字母的意思是
  7. 几种更新(Update语句)查询的方法【转】
  8. CSS 负边距自适应布局
  9. hibernate配置文件详细解释
  10. 【转】spin_lock &amp; mutex_lock的区别? .
  11. android 利用Bitmap获取圆角矩形、圆形图片
  12. 转-——推荐几个web中常用的一些js图表插件 - zccst
  13. hadoop出现ava.lang.ClassNotFoundException: org.codehaus.jackson.map.JsonMappingException
  14. WINDOWS动态链接库--MFC规则动态链接库
  15. AR入门系列-05-Vuforia识别目标视频播放
  16. protobuf 系列 ---------下载、编译与使用
  17. iOS 隐藏导航条分割线
  18. aliyun添加数据盘parted方式分区格式化和lvm挂载及数据盘的扩容
  19. webpack 的 入口(Entry)、输出(Output)
  20. python 算法面试题

热门文章

  1. 项目删除又重新clone,未重新进入项目目录或重启terminal,导致git命令或其他命令报 目录不存在的错误
  2. linux rhel unix centos FreeBSD 常用命令
  3. Jmeter(二)参数化
  4. Spring第五弹—–配置Spring管理的bean的作用域和生命周期
  5. PAT 1037 Magic Coupon[dp]
  6. CentOS忘记用户名或者密码解决办法
  7. 项目总结之HashMap问题
  8. qqwry.dat输出乱码问题及maven打包后资源文件大小不一致的问题
  9. Eclipse 导入Maven 项目报错
  10. Redis学习笔记之Redis单机,伪集群,Sentinel主从复制的安装和配置