Java 1.8 RandomAccess接口
简介
RandomAccess接口从jdk1.4开始提供,接口中没有定义任何方法,是标志接口,说明实现该接口的List支持快速随机访问功能。
标志接口
标志接口是没有任何方法和属性的空接口,仅仅表明它的类属于某种特定类型,用法如下:
if(obj instanceof Cloneable) {………}
常用的标志接口示例:
- java.io.Serializable:序列号接口。未实现此接口的类将无法使其任何状态序列化或反序列化.为保证 serialVersionUID
值跨不同 java 编译器实现的一致性,序列化类必须声明一个明确的 serialVersionUID 值; - java.lang.Cloneable:克隆接口。表明Object.clone()方法可以合法地对该类实例进行按字段复制.实现此接口的类应该使用公共方法重写
Object.clone(它是受保护的).如果在没有实现 Cloneable 接口的实例上调用 Object 的 clone
方法,则会导致抛出 CloneNotSupportedException 异常; - java.util.RandomAccess:上面说的快速随机访问接口。用来表明其支持快速(通常是固定时间)随机访问.此接口的主要目的是允许一般的算法更改其行为,从而在将其应用到随机或连续访问列表时能提供良好的性能;
java.rmi.Remote:(没接触过)Remote 接口用于标识其方法可以从非本地虚拟机上调用的接口.任何远程对象都必须直接或间接实现此接口.只有在“远程接口”(扩展 java.rmi.Remote 的接口)中指定的这些方法才可远程使用;
实现该接口的List
- 实现该接口的类有ArrayList, AttributeList, CopyOnWriteArrayList, RoleList,
RoleUnresolvedList, Stack, Vector。 - 实现该接口List的特点是支持快速随机访问功能,如ArarryList的get(i)方法
- 官方还说了,实现该接口的list特点是get(i)的性能优于迭代器遍历
for (int i=0, n=list.size(); i < n; i++)
list.get(i);
runs faster than this loop:
for (Iterator i=list.iterator(); i.hasNext(); )
i.next();
源码
package java.util;
/**
- @since 1.4
*/
public interface RandomAccess {
}
参考链接
jdk官网英文介绍
https://docs.oracle.com/javase/8/docs/api/index.html