• 技术文章 >Java >java教程

    关于java中RandomAccess接口源码的详细分析

    黄舟黄舟2017-05-28 09:06:10原创1275

    这篇文章主要介绍了java 中RandomAccess接口源码分析的相关资料,需要的朋友可以参考下

    java 中RandomAccess接口源码分析

    RandomAccess是一个接口,位于java.util包中。

    这个接口的作用注释写的很清楚了:

    /**
     * Marker interface used by <tt>List</tt> implementations to indicate that
     * they support fast (generally constant time) random access. The primary
     * purpose of this interface is to allow generic algorithms to alter their
     * behavior to provide good performance when applied to either random or
     * sequential access lists.
     * List实现所使用的标记接口,用来表明实现了这些接口的list支持快速(通常是常数时间)随机访问。
     * 这个接口的主要目的是允许一般的算法更改它们的行为,以便在随机或者顺序存取列表时能提供更好的性能。
     * <p>The best algorithms for manipulating random access lists (such as
     * <tt>ArrayList</tt>) can produce quadratic behavior when applied to
     * sequential access lists (such as <tt>LinkedList</tt>). Generic list
     * algorithms are encouraged to check whether the given list is an
     * <tt>instanceof</tt> this interface before applying an algorithm that would
     * provide poor performance if it were applied to a sequential access list,
     * and to alter their behavior if necessary to guarantee acceptable
     * performance.
     * 操作随机访问列表(如ArrayList)的最佳算法在应用于顺序存取列表时,有可能产生二次项行为。
     * 泛型算法列表鼓励在将某个算法应用于顺序存取列表可能导致差的性能之前,先检查给定的列表是否是这个接口的一个实例,
     * 并在需要时去改变这些算法的行为以保证性能。
     * <p>It is recognized that the distinction between random and sequential
     * access is often fuzzy. For example, some <tt>List</tt> implementations
     * provide asymptotically linear access times if they get huge, but constant
     * access times in practice. Such a <tt>List</tt> implementation
     * should generally implement this interface. As a rule of thumb, a
     * <tt>List</tt> implementation should implement this interface if,
     * for typical instances of the class, this loop:
    
     * 随机访问和顺序存取之间的界限通常是模糊的。例如,一些List实现在变得很大时会导致渐进的非线性访问时间,但实际上是常量访问时间。
     * 这样的List实现通常都应该实现该接口。
     * 一般来说,某个List实现如果(对某些典型的类的实例来说)满足下面的条件,就应该实现这个接口:循环
     * <pre>
     *   for (int i=0, n=list.size(); i < n; i++)
     *     list.get(i);
     * </pre>
     * runs faster than this loop:
     * 比下面的循环运行速度快。
     * <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" rel="external nofollow" >
     * Java Collections Framework</a>.
     * 这个接口是Java集合框架的一员。
     * @since 1.4
     */
    public interface RandomAccess {
    }

    RandomAccess是一个空接口,而空接口的作用一般是起到一个标识的作用。

    通俗点讲,就是判断一个list是否实现了RandomAcess接口,如果实现了,采用下面所示的简单的for循环进行访问速度比较快:

    for (int i=0, n=list.size(); i < n; i++)
       list.get(i);

    如果未实现RandomAcess接口,则采用下面的iterator循环访问速度比较快。

    for (Iterator i=list.iterator(); i.hasNext(); )
       i.next();

    判断使用instanceof,即

     if (list instanceof RandomAccess)

    以上就是关于java中RandomAccess接口源码的详细分析的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:总结Kotlin语法学习--变量定义、函数扩展、Parcelable序列化 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • Java中Map集合体系的基本使用和常用API• Java数据结构常见排序算法(总结分享)• 一起来分析java设计模式之单例• 深入分析Java的序列化与反序列化• Java知识点总结之多线程基础
    1/1

    PHP中文网