三分钟了解标记接口 RandomAccess
三分钟了解标记接口 RandomAccess
1. 接口定义
RandomAccess 是一个标记接口(marker interface),没有定义任何方法。它的主要作用是通过实现该接口来表明某个 List 实现类支持快速随机访问。
2. 用途
- 区分访问方式:用于区分
List的访问方式是随机访问(random access)还是顺序访问(sequential access)。 - 优化算法性能:允许通用算法根据
List是否实现了RandomAccess接口来调整行为,从而避免在顺序访问列表(如LinkedList)上执行可能导致性能问题的操作。
3. 背景
- 随机访问列表(如
ArrayList)通常可以通过索引快速访问元素,时间复杂度为 O(1)。 - 顺序访问列表(如
LinkedList)通过索引访问元素时需要从头开始遍历,时间复杂度为 O(n)。
4. 使用场景
- 当需要对
List进行操作时,可以检查其是否实现了RandomAccess接口:if (list instanceof RandomAccess) { // 使用随机访问优化的算法 } else { // 使用顺序访问友好的算法 }
5. 判断依据
-
如果对于典型的
List实例,以下循环运行更快,则该List应实现RandomAccess接口:for (int i = 0, n = list.size(); i < n; i++) { list.get(i); } -
相比之下,如果以下循环运行更快,则不应实现
RandomAccess接口:for (Iterator<?> i = list.iterator(); i.hasNext(); ) { i.next(); }
6. 示例
- 实现
RandomAccess的类:ArrayList、Vector等。 - 未实现
RandomAccess的类:LinkedList。
7. 框架归属
RandomAccess 是 Java Collections Framework 的一部分,自 JDK 1.4 起引入。
总结
RandomAccess 接口的主要目的是帮助开发者根据 List 的访问特性选择合适的算法,从而提高性能。它本身不包含任何方法,仅作为标记接口存在。

浙公网安备 33010602011771号