RandomAccess 基本上是什么?为什么我们使用 RandomAccess?

Ash*_*ahu 5 java collections

我正在研究 Java 中的集合,我遇到了一个问题,即某些类(如 ArrayList)也实现了RandomAccess,而有些类则没有。我想知道为什么要实现这个接口以及它的好处是什么?如果我在课堂上使用这个接口会发生什么?

Ama*_*bra 6

随机访问列表与顺序列表

随机访问列表是一个列表,您可以在其中以恒定且更快的速度访问任何随机数据,而顺序列表是您必须顺序遍历它之前的所有项目,以访问任何特定项目的列表。

如下图所示,你可以看到在第一个例子中,如果你想访问 9,你可以直接使用索引获取值,而在第二个图像中,数据不能随机访问,需要迭代23 -> 3 -> 17 -> 942 -> 9因此在第二种情况下访问任何值的时间不是恒定的,并且每个值都不同。

在此处输入图片说明

为什么要实现 RandomAccess 接口?

作为 JDK 1.4 的一部分引入,它是一个标记接口,表示实现它的类在访问列表中的任何随机数据时需要恒定且快速的时间。

有什么好处?

该算法的任何实现都可以检查当前列表是否是随机访问的子项,从而确保随机访问或顺序访问的最佳性能。

下面是一个博客的一个很好的例子,它以一种很好的方式解释了一种用法:

Object o;
if (listObject instanceof RandomAccess)
{
  for (int i=0, n=list.size(); i < n; i++)
  {
    o = list.get(i); // directly get the object as list implements Random access
    //do something with object o
  }

}
else
{
  Iterator itr = list.iterator();
  for (int i=0, n=list.size(); i < n; i++)
  {
    o = itr.next(); // Use iterator to get values sequentially as random access 
                    //  is not fast for this list and hence does not implement RandomAccess
    //do something with object o

  }
}
Run Code Online (Sandbox Code Playgroud)

如果我在课堂上使用这个接口会发生什么?

当您实现任何其他标记接口时,也会发生同样的情况。它只是向其他类表明实现它的类可以期待什么。

您还可以参考Java 文档以了解更多相关信息。