RandomAccess 在现代 Java 中有什么价值吗?

fge*_*fge 5 java collections

有一个特殊的接口被记录为这样(仅提取物):

List 实现使用的标记接口来指示它们支持快速(通常是恒定时间)随机访问。此接口的主要目的是允许通用算法改变其行为,以在应用于随机或顺序访问列表时提供良好的性能。

列出的实现是(从 JDK 8 开始):

ArrayList, AttributeList, CopyOnWriteArrayList, RoleList, RoleUnresolvedList, Stack, Vector
Run Code Online (Sandbox Code Playgroud)

其中两个(实际上是后两个)在您今天生成的任何代码中都已过时。

现在,作为一个警告,我的研究并不广泛,以至于我一时兴起问这个问题。此时是否有任何用例可以让人们看到需要使用此接口,甚至实现它?

Fel*_*elk 0

该文档给出了如何使用此接口的一个很好的示例:作为指示器。我可以想象这样一个用例:您有一个列表,但不知道它是否通过迭代或随机访问而表现得更快:

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)