在jdk文档中对RandomAccess接口的定义如下:  public interface RandomAccess

下面是jdk的注解翻译
    List 实现所使用的标记接口,用来表明其支持快速(通常是固定时间)随机访问。此接口的主要目的是允许一般的算法更改其行为,从而在将其应用到随机或连续访问列表时能提供良好的性能。
    将操作随机访问列表的最佳算法(如 ArrayList )应用到连续访问列表(如 LinkedList )时,可产生二次项的行为。如果将某个算法应用到连续访问列表,那么在应用可能提供较差性能的算法前,鼓励使用一般的列表算法检查给定列表是否为此接口的一个 instanceof ,如果需要保证可接受的性能,还可以更改其行为。
    现在已经认识到,随机和连续访问之间的区别通常是模糊的。例如,如果列表很大时,某些 List 实现提供渐进的线性访问时间,但实际上是固定的访问时间。这样的 List 实现通常应该实现此接口。

强调:JDK中推荐的是对List集合尽量要实现RandomAccess接口
    如果集合类是 RandomAccess的实现,则尽量用for(int i = 0; i < size; i++) 来遍历 而不要用Iterator迭代器来遍历。
    反过来,如果List是 Sequence List,则最好用迭代器来进行迭代。
JDK中说的很清楚,在对List特别是Huge size的List的遍历算法中,要尽量来判断是属于RandomAccess(如ArrayList)还是Sequence List (如LinkedList),因为 适合RandomAccess List的遍历算法,用在Sequence List上就差别很大,常用的作法就是:
    要作一个判断:
    if (list instance of RandomAccess) {
        for(int m = 0; m < list.size(); m++){}
    }else{
        Iterator iter = list.iterator();
        while(iter.hasNext()){}

}

测试:

public class TestRandomAccess {@Testpublic void testTraverse() {ArrayList<Integer> arraylist = new ArrayList<Integer>();LinkedList<Integer> linkedList = new LinkedList<Integer>();initList(arraylist, 1000);initList(linkedList, 1000);System.out.println("ArrayList实现了RandomAccess接口");implRandomAccessTraverse(arraylist); //花了10ms时间System.out.println("LinkedList未实现了RandomAccess接口");implRandomAccessTraverse(linkedList); //花了434ms时间System.out.println("\nArrayList实现了RandomAccess接口");noImplRandomAccessTraverse(arraylist);  //花了39ms时间System.out.println("LinkedList未实现了RandomAccess接口");noImplRandomAccessTraverse(linkedList); //花了27ms时间}private long startTime = 0;private long endTime = 0;// 初始化列表public  void initList(List<Integer> list, int n) {for (int i = 0; i < n; i++) {list.add(i);}}//有实现RandomAccess接口的遍历全部数据,public void implRandomAccessTraverse(List list) {startTime = System.currentTimeMillis();for (int count = 0; count <= 1000; count++) {for (int i = 0; i < list.size(); i++) {list.get(i);}}endTime = System.currentTimeMillis();System.out.println("使用loop迭代一共花了" + (endTime - startTime) + "ms时间");}//没有实现RandomAccess接口的遍历全部数据public void noImplRandomAccessTraverse(List list) {startTime = System.currentTimeMillis();for (int count = 0; count <= 1000; count++) {for (Iterator itr = list.iterator(); itr.hasNext();) {itr.next();}}endTime = System.currentTimeMillis();System.out.println("使用Iterator迭代一共花了" + (endTime - startTime) + "ms时间");}}

Java接口RandomAccess相关推荐

  1. JAVA中RandomAccess接口

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

  2. 关于接口 RandomAccess

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

  3. Java接口对Hadoop集群的操作

    Java接口对Hadoop集群的操作 首先要有一个配置好的Hadoop集群 这里是我在SSM框架搭建的项目的测试类中实现的 一.windows下配置环境变量 下载文件并解压到C盘或者其他目录. 链接: ...

  4. 推荐一个 Java 接口快速开发框架

    欢迎关注方志朋的博客,回复"666"获面试宝典 今天给小伙伴们介绍一个Java接口快速开发框架-magic-api 简介 magic-api 是一个基于 Java 的接口快速开发框 ...

  5. java接口如何定义常量 c_在Java接口中怎样访问定义的常量呢?

    java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能).那么我们在Java接口中怎 ...

  6. Java接口和Java抽象类

    Java接口和Java抽象类有太多相似的地方,又有太多特别的地方,究竟在什么地方,才是它们的最佳位置呢?把它们比较一下,你就可以发现了. 1.Java接口和Java抽象类最大的一个区别,就在于Java ...

  7. java接口深入理解,深入理解Java接口

    从java接口是什么到为什么,理解java接口,主要解决三个问题 1.java接口是什么 2.java接口为什么 3.java接口怎么用 java接口是什么 接口是方法的抽象,通过接口规定类需要实现那 ...

  8. java安全接口调用_步骤3:调用Java接口

    本文档主要介绍了通过调用Java接口生成工作密钥和进行通用数据加解密的操作方法. 整体流程 初始化SDK.具体内容请参见 配置Java接口.具体内容请参见 初始化SDK 使用以下方法初始化SDK.hs ...

  9. 对接第三方平台JAVA接口问题推送和解决

    对接第三方平台JAVA接口问题推送和解决 参考文章: (1)对接第三方平台JAVA接口问题推送和解决 (2)https://www.cnblogs.com/CreateMyself/p/7295879 ...

最新文章

  1. nginx 缓存时间说明
  2. 2018 KubeCon + CloudNativeCon完美落幕,行云献力
  3. 《大数据》2021年第2期目次摘要
  4. HTML照片墙 个性相册源码
  5. 【BZOJ3566】概率充电器,树形概率DP
  6. python的设计哲学_Python的设计哲学--zen of Python
  7. C#调用Matlab BP神经网络预测数据
  8. linux系统下怎么安装软件,如何在Linux系统上安装软件
  9. 关于java.lang.IllegalArgumentException: KFC Crazy Thursday need $50的问题
  10. 本市医保定点专科医院、定点中医院及19家A类医疗机构
  11. 图像超分辨率:优化最近邻插值Super-Resolution by Predicting Offsets
  12. 关于‘go list‘ failed with: error obtaining VCS status error obtaining VCS status: exit status 128问题的解决
  13. linux 服务配置 ppt,Linux网络服务器配置与管理.ppt
  14. Aurelia历险记:创建自定义PDF查看器
  15. 面对人工智能,我们应有的态度
  16. 阿里双11集团技术总指挥——汤兴:一场不亚于移动化的变革已经发生
  17. 中国式IT运维,趟出自己的“长期主义”河流
  18. git reset命令详解
  19. 冷链物流行业市场调研 冷链物流将朝着智慧化方向发展
  20. Babylonjs 基础教程与填坑④sandbox+inspector面板中的Mesh类

热门文章

  1. 一行python代码能实现的功能_一行 Python 代码能实现这么多丧心病狂的功能?
  2. 统计学:第六章-总体均数得估计
  3. iframe交互问题,浏览器存在差异
  4. 【体验攻略】于曙光智算计算平台进行气象数值模式WRF的编译、运行和处理
  5. 杂谈 流行语------文言文
  6. Maxon Cinema 4D 2023三维动画设计最新版c4d
  7. Jetson 系列——Ubuntu重启网卡的三种方法
  8. Linux智能手表的浪潮即将向我们袭来
  9. cocosCreator 接广告 穿山甲 Topon 聚合平台
  10. 朴素贝叶斯实现书籍分类