原文作者:志波同学

原文地址:Java编程:RandomAccess接口

目录

一、随机访问和串行访问

二、快速随机访问


RandomAccess 是一个标记接口,标识实现该接口的类支持快速随机访问。

一、随机访问和串行访问

举个例子:在 Java 中,有 ArrayList 和 LinkedList 两种数据类型。

二、快速随机访问

根据 RandomAccess 的注释理解,如果“代码一”的执行速度比“代码二”快,则应该实现 RandomAccess 接口。换句话说,如果集合类(List)实现了 RandomAccess 接口,则采用“代码一”的方式能够获得更高的执行效率。这也是为什么阿里巴巴的代码规约中推荐使用“代码一”的方式进行集合遍历。

代码一:
for (int i=0, n=list.size(); i < n; i++)list.get(i);代码二:
for (Iterator i=list.iterator(); i.hasNext(); )i.next();

通过查看源代码,我们会发现 ArrayList 实现了 RandomAccess 接口,LinkedList 则没有实现,具体原因我们可以分析一个两个类的 get 方法,在这里我们不进行具体分析,大家自己看源码哈。


package java.util;/***1. 被 List 实现类使用的标记接口,标识该类支持快速随机访问(通常是常量访问时间)。该接口的主要目的是在进行随机或者串行访问 list 时,允许算法修改他们的行为来获得更好的性能。** 2. 将随机访问 lists(如 ArrayList)的最好算法应用于顺序访问 lists(如 LinkedList)时,可能会产生二次行为(我的理解:这里的二次行为指的是通过遍历 LinkedList ,找到目标对象,
*这比通过 ArrayList 银锁直接获取目标对象,多了一个遍历行为,这个遍历行为就是二次行为)。如果将随机访问算法应用于串行访问 list 时,将会产生较差的性能。鼓励通用列表算法在应用之前,
*先检查 List 是否实现了 RandomAccess 接口,如果实现该接口,则采用快速随机访问法进行遍历,否则使用迭代器的方式进行访问。* 3. 人们认识到随访访问和串行访问的区别通过是模糊的。例如,如果 List 变得很大,则提供渐近线性的访问时间,然而在实践中基本上是常量访问时间,像这样的 List 应该实现RandomAccess 接口。根据经验,如果“算法一”的访问速度比“算法二”快,则 List 应该实现RandomAccess 接口。* algorithm1:* <pre>*     for (int i=0, n=list.size(); i &lt; n; i++)*         list.get(i);* </pre>* runs faster than this loop:* algorithm2:* <pre>*     for (Iterator i=list.iterator(); i.hasNext(); )*         i.next();* </pre>* <p>This interface is a member of the* <a href="{@docRoot}/../technotes/guides/collections/index.html">* Java Collections Framework</a>.** @since 1.4*/
public interface RandomAccess {
}

重要接口—RandomAccess接口相关推荐

  1. ArrayList 为什么要实现 RandomAccess 接口?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | http://t.cn/AilfR3YW 在我们的开发中 ...

  2. Java ArrayList 为什么要实现 RandomAccess 接口?

    在我们的开发中,List接口是最常见不过,而且我们几乎每天都在用ArrayList或者LinkedList,但是细心的同学有没有发现,ArrayList中实现了RandomAccess接口,而Link ...

  3. 关于接口 RandomAccess

    今天看到java.util.Collections这个工具类中的 public static <T> void fill(List<? super T> list, T obj ...

  4. 【Java】ArrayList 为啥要实现 RandomAccess 接口

    1.概述 转载:http://www.javastack.cn/article/2019/why-arraylist-impl-randomaccess-interface/ 在我们的开发中,List ...

  5. RandomAccess接口

    RandomAccess是一个标记接口,实现该接口表示支持快速访问.这是一个空接口,没有任何方法. 当实现该接口时,说明支持快速访问. 即: for (int i=0, n=list.size(); ...

  6. 开课吧之Java常见面试题之RandomAccess接口

    RandomAccess接口?* 查看源码我们发现实际上 RandomAccess 接口中什么都没有定义.所以,在我看来 RandomAccess 接口不过是一个标识罢了.标识什么? 标识实现这个接口 ...

  7. RandomAccess接口使用

    引子:   RandomAccess在类Collections的shuffle()方法中的使用:(jdk源码如下) Java代码   <span style="font-size: s ...

  8. RandomAccess接口详解

    RandomAccess接口详解 Interface RandomAccess All Known Implementing Classes: ArrayList, AttributeList, Co ...

  9. RandomAccess接口的使用

    http://blog.csdn.net/keda8997110/article/details/8635005 引子:RandomAccess在类Collections的shuffle()方法中的使 ...

最新文章

  1. 这就是我向您推荐使用Thunderbird邮件客户端的理由
  2. where()函数的用法
  3. 001考试类小程序设计方案简要需求分析和数据库简要设计
  4. linux如何修改主机名
  5. 达梦数据库中服务器日志的开关
  6. luogu_1002 过河卒
  7. 不停止mysql就卸载_MYSQL安装与卸载(一)
  8. [置顶] Postman插件下载安装与使用教程
  9. Qunit 和 jsCoverage使用方法(js单元测试)
  10. 深度学习的实用层面 —— 1.4 正则化
  11. 今天执行grep命令差点把服务器搞崩
  12. mysql数据库分页查询,limit语句用法
  13. 计算机在饲养管理方面的应用,高新技术对奶牛业的应用
  14. 数据中心服务器机柜电气参数,数据中心服务器机柜选择指南
  15. Android 软键盘的那些坑,原理篇来了!
  16. OneNote for Windows10 闪退 的解决办法
  17. PyQt5 与 PySide2 所有事件大集合,一段代码包括键盘、鼠标和窗口所有事件
  18. CImageList::GetImageInfo取到的bitmap不能用
  19. WPS 两个 word 合并
  20. 深度学习(10)ablation experiments

热门文章

  1. Asp.Net Mvc - 在OnResultExecut* 拦截Action返回的HTML
  2. 在SQL Server 2008中调用.net,dll
  3. 关于字符串排序的别的规则
  4. vue/cli 3.0 font-size随屏幕大小变化而变化 rem设置
  5. Python包的相对导入时出现问题解决
  6. 《软件架构师的12项修炼》读书笔记-技术之天花板
  7. json_encode用法
  8. 据说这份高考卷,只有程序员能得满分!
  9. NVelocity的宏使用
  10. C#编程(三十五)----------foreach和yield