ArrayList 实现 RandomAccess 接口有何作用?为何 LinkedList 却没实现这个接口?

  1. RandomAccess 接口只是一个标志接口,只要 List 集合实现这个接口,就能支持快速随机访问。通过查看 Collections 类中的 binarySearch() 方法,可以看出,判断 List 是否实现 RandomAccess 接口来实行indexedBinarySerach(list, key) 或 iteratorBinarySerach(list, key)方法。再通过查看这两个方法的源码发现:实现 RandomAccess 接口的 List 集合采用一般的 for 循环遍历,而未实现这接口则采用迭代器,即 ArrayList 一般采用 for 循环遍历,而 LinkedList 一般采用迭代器遍历;

  2. ArrayList 用 for 循环遍历比 iterator 迭代器遍历快,LinkedList 用 iterator 迭代器遍历比 for 循环遍历快。所以说,当我们在做项目时,应该考虑到 List 集合的不同子类采用不同的遍历方式,能够提高性能。

发表评论

后才能评论

评论(2)

  • Victor 普通 2022-01-24 8:41 上午

    为什么ArrayList使用for循环就比较快呢?同理,LinkedList为什么使用迭代器比较快?网上搜了一下,好像都是说速度,但是没说清楚为什么速度有差异?