RandomAccess接口

标记接口

在学习RandomAccess接口之前我们先学习一下标记接口,简单的说标记接口就是没有任何属性和方法的接口,只是用来标识实现该接口的类具有某种特定的功能。
jdk中常见的标记接口有Cloneable接口、Serializable接口和本文要学习的RandomAccess接口,接口定义分别如下。
Cloneable接口:

package java.lang;

/**
 * @author  unascribed
 * @see     java.lang.CloneNotSupportedException
 * @see     java.lang.Object#clone()
 * @since   JDK1.0
 */
public interface Cloneable {
}

Serializable接口:

package java.io;

/**
 * @author  unascribed
 * @see java.io.ObjectOutputStream
 * @see java.io.ObjectInputStream
 * @see java.io.ObjectOutput
 * @see java.io.ObjectInput
 * @see java.io.Externalizable
 * @since   JDK1.1
 */
public interface Serializable {
}

RandomAccess接口:

package java.util;

/**
 * @since 1.4
 */
public interface RandomAccess {
}

可见这三个接口都没有定义方法和属性,Cloneable接口和Serializable接口表示的含义会有专门的文章来介绍,本文只介绍RandomAccess接口。

RandomAccess接口的官方解释

jdk文档对RandomAccess接口的描述可以归纳为两点:
1.实现RandomAccess接口的列表类支持快速随机访问(即可以通过下标对List进行存取操作)
2.实现RandomAccess接口的列表实例化对象list此循环

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

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

运行速度要快

RandomAccess接口如何使用

jdk中java.util.Collections类中多处使用RandomAccess,例如Collections类的fill()方法:

public static  void fill(List list, T obj) {
    int size = list.size();

    if (size < FILL_THRESHOLD || list instanceof RandomAccess) {
        for (int i=0; i itr = list.listIterator();
        for (int i=0; i

在遍历列表进行赋值之前会对该列表做一次校验,如果该列表实现了RandomAccess接口就使用索引对列表中指定位置的元素进行赋值,否则使用迭代器next()方法对该元素赋值。
在开发的过程中可以参考这种方式实现。

你可能感兴趣的:(RandomAccess接口)