java 中RandomAccess接口源码分析

 更新时间:2017年05月28日 08:59:08   投稿:lqh  
这篇文章主要介绍了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 &lt; 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 &lt; n; i++)
   list.get(i);

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

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

判断使用instanceof,即

 if (list instanceof RandomAccess) 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • 冒泡排序的原理及java代码实现

    冒泡排序的原理及java代码实现

    冒泡排序法:关键字较小的记录好比气泡逐趟上浮,关键字较大的记录好比石块下沉,每趟有一块最大的石块沉底。算法本质:(最大值是关键点,肯定放到最后了,如此循环)每次都从第一位向后滚动比较,使最大值沉底,最小值上升一次,最后一位向前推进
    2016-02-02
  • SpringAOP中的动态代理技术深入解析

    SpringAOP中的动态代理技术深入解析

    这篇文章主要介绍了SpringAOP中的动态代理技术深入解析,spring默认使用JDK动态代理实现AOP,类如果实现了接口,spring就会用JDK动态代理实现AOP,如果目标类没有实现接口,spring则使用Cglib动态代理来实现AOP,需要的朋友可以参考下
    2024-01-01
  • 简单了解4种分布式session解决方案

    简单了解4种分布式session解决方案

    这篇文章主要介绍了简单了解4种分布式session解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Java关于后端怎么去接收Date、LocalDateTime类型的参数详解

    Java关于后端怎么去接收Date、LocalDateTime类型的参数详解

    这篇文章主要介绍了java关于后端怎么去接收Date、LocalDateTime类型的参数,文中有详细的代码流程,对我们学习或工作有一定的参考价值,需要的朋友可以参考下
    2023-06-06
  • MyBatis-Plus 查询返回实体对象还是map

    MyBatis-Plus 查询返回实体对象还是map

    这篇文章主要介绍了MyBatis-Plus 查询返回实体对象还是map,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • JAVA多线程中join()方法的使用方法

    JAVA多线程中join()方法的使用方法

    虽然关于讨论线程join()方法的博客已经非常极其特别多了,但是前几天我有一个困惑却没有能够得到详细解释,当系统中正在运行多个线程时,join()到底是暂停了哪些线程,所以本文详细解释一下希望能帮助到和我有相同困惑的同学
    2021-05-05
  • Java 17新特性详细讲解与代码实例

    Java 17新特性详细讲解与代码实例

    这篇文章主要给大家介绍了关于Java 17新特性详细讲解与代码实例的相关资料,Java 17是2021年9月发布的最新版本,其中包含了很多新特性和改进,这些新特性和改进将进一步提高 Java 语言的性能和可用性,需要的朋友可以参考下
    2023-09-09
  • 23种设计模式(20)java中介者模式

    23种设计模式(20)java中介者模式

    这篇文章主要为大家详细介绍了23种设计模式之java中介者模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 基于JavaMail API收发邮件的方法

    基于JavaMail API收发邮件的方法

    这篇文章主要介绍了基于JavaMail API收发邮件的方法,实例分析了javamail的使用方法与相关注意事项,非常具有实用价值,需要的朋友可以参考下
    2015-07-07
  • javaweb设计中filter粗粒度权限控制代码示例

    javaweb设计中filter粗粒度权限控制代码示例

    这篇文章主要介绍了javaweb设计中filter粗粒度权限控制代码示例,小编觉得还是挺不错的,需要的朋友可以参考。
    2017-10-10

最新评论