有一个特殊的接口被记录为这样(仅提取物):
List 实现使用的标记接口来指示它们支持快速(通常是恒定时间)随机访问。此接口的主要目的是允许通用算法改变其行为,以在应用于随机或顺序访问列表时提供良好的性能。
列出的实现是(从 JDK 8 开始):
Run Code Online (Sandbox Code Playgroud)ArrayList, AttributeList, CopyOnWriteArrayList, RoleList, RoleUnresolvedList, Stack, Vector
其中两个(实际上是后两个)在您今天生成的任何代码中都已过时。
现在,作为一个警告,我的研究并不广泛,以至于我一时兴起问这个问题。此时是否有任何用例可以让人们看到需要使用此接口,甚至实现它?
该文档给出了如何使用此接口的一个很好的示例:作为指示器。我可以想象这样一个用例:您有一个列表,但不知道它是否通过迭代或随机访问而表现得更快:
void process(List<E> items) {
if (items instanceof RandomAccess)
for (int i = 0; i < items.size(); i++) System.out.println(items.get(i));
else
for (E item : items) System.out.println(item);
}
Run Code Online (Sandbox Code Playgroud)