当前位置: 首页 > 面试题库 >

RandomAccess接口?

卫景明
2023-03-14
本文向大家介绍RandomAccess接口?相关面试题,主要包含被问及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循环
 类似资料:
  • 本文向大家介绍java 中RandomAccess接口源码分析,包括了java 中RandomAccess接口源码分析的使用技巧和注意事项,需要的朋友参考一下 java 中RandomAccess接口源码分析 RandomAccess是一个接口,位于java.util包中。 这个接口的作用注释写的很清楚了:  RandomAccess是一个空接口,而空接口的作用一般是起到一个标识的作用。 通俗点讲

  • 问题内容: 实现接口。接口没有方法。当我检查它没有实现接口。 那么,在实现的意义何在? 问题答案: 没有方法的接口在Java中称为标记接口。 根据RandomAccess的JavaDoc: List实现使用的标记接口,指示 它们支持快速(通常为恒定时间)随机访问。 有关更多信息,请检查两个JavaDoc页面。 http://docs.oracle.com/javase/6/docs/api/jav

  • 为什么只有ArrayList和Vector实现了RandomAccess接口而LinkedList没有?据我所知,RandomAccess实现的类可以更快地检索集合中的元素。 此外,如果我尝试创建一个扩展java.util的自定义类。LinkedList还实现了RandomAccess接口,这是否使自定义类与LinkedList一样,但具有RandomAccess? 下面是实现我在第二点中所述内容

  • 背景介绍 兑吧积分商城是第三方开放平台,兑吧积分商城和开发者服务端的数据交互,需要相应的接口进行数据传输,所以使用兑吧积分商城,需要开发者对接兑吧的相关接口。 接口说明 兑吧积分商城为了丰富用户体验,在开放的接口中是有必选接口和可选接口的区分 一. 必选接口 1.免登录接口 2.扣积分接口 3.兑换结果通知接口 二. 扩展功能和接口 1. 游客用户唤醒登录 2. 自有虚拟商品充值 接口说明 充值接

  • 节点对象除了继承 Node 接口以外,还拥有其他接口。ParentNode接口表示当前节点是一个父节点,提供一些处理子节点的方法。ChildNode接口表示当前节点是一个子节点,提供一些相关方法。 ParentNode 接口 如果当前节点是父节点,就会混入了(mixin)ParentNode接口。由于只有元素节点(element)、文档节点(document)和文档片段节点(documentFra

  • 节点都是单个对象,有时需要一种数据结构,能够容纳多个节点。DOM 提供两种节点集合,用于容纳多个节点:NodeList和HTMLCollection。 这两种集合都属于接口规范。许多 DOM 属性和方法,返回的结果是NodeList实例或HTMLCollection实例。主要区别是,NodeList可以包含各种类型的节点,HTMLCollection只能包含 HTML 元素节点。 NodeList