随机访问标记接口

时间:2016-02-19 07:04:35

标签: java collections

如何实施

  

随机访问标记界面

是否更快地在 ArrayList 中进行检索操作? 标记接口请求JVM以便更快地访问或检索值。

JVM采用什么算法来加快访问速度?

希望你现在能理解这个问题。

2 个答案:

答案 0 :(得分:1)

它没有。

它告诉我们实施支持快速随机访问。

这是标记界面的目的。它标记一个实现。

引用文档

  

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

答案 1 :(得分:1)

它标记了可以随机访问的列表实现。

这样,如果有效,调用者可以随机访问数据,如果不是,则可以使用其他方法。

e.g。在AbstractList中,您有一个可以为RandomAccess优化的实现。

public List<E> subList(int fromIndex, int toIndex) {
    return (this instanceof RandomAccess ?
            new RandomAccessSubList<>(this, fromIndex, toIndex) :
            new SubList<>(this, fromIndex, toIndex));
}
  

JVM采用什么算法来加快访问速度?

重要的方法是get(int),需要O(1)

public E get(int index) {
    rangeCheck(index);

    return elementData(index);
}

呼叫

E elementData(int index) {
    return (E) elementData[index];
}

你可以看到它只是查找数组中的索引,所以它是O(1)

相关问题