栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

RandomAccess接口?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

RandomAccess接口?

查看源码我们发现实际上

RandomAccess
接口中什么都没有定义。所以,在我看来
RandomAccess
接口不过是一个标识罢了。标识什么? 标识实现这个接口的类具有随机访问功能。

binarySearch(
)方法中,它要判断传入的list 是否
RamdomAccess
的实例,如果是,调用
indexedBinarySearch()
方法,如果不是,那么调用
iteratorBinarySearch()
方法

java    public static <T>    int binarySearch(List<? extends Comparable<? super T>> list, T key) {        if (list instanceof RandomAccess || list.size()<BINARYSEARCH_THRESHOLD) return Collections.indexedBinarySearch(list, key);        else return Collections.iteratorBinarySearch(list, key);    }

ArrayList
实现了
RandomAccess
接口, 而
linkedList
没有实现。为什么呢?我觉得还是和底层数据结构有关!
ArrayList
底层是数组,而
linkedList
底层是链表。数组天然支持随机访问,时间复杂度为 O(1),所以称为快速随机访问。链表需要遍历到特定位置才能访问特定位置的元素,时间复杂度为 O(n),所以不支持快速随机访问。,
ArrayList
实现了
RandomAccess
接口,就表明了他具有快速随机访问功能。
RandomAccess
接口只是标识,并不是说
ArrayList
实现
RandomAccess
接口才具有快速随机访问功能的!

下面再总结一下 list 的遍历方式选择:

  • 实现了
    RandomAccess
    接口的list,优先选择普通 for 循环 ,其次 foreach,
  • 未实现
    RandomAccess
    接口的list,优先选择iterator遍历(foreach遍历底层也是通过iterator实现的,),大size的数据,千万不要使用普通for循环
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/363776.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号