RandomAccess接口

RandomAccess接口在Java中是一个标识性接口,用于标记List实现支持快速随机访问。ArrayList和Vector实现了该接口,但LinkedList没有。接口在Collections类中有广泛应用,如binarySearch方法根据接口判断执行不同搜索算法。实验表明,对于ArrayList,使用for循环遍历比Iterator快,反之对于LinkedList,Iterator更优。因此,根据集合是否实现RandomAccess接口选择合适的遍历方式。
摘要由CSDN通过智能技术生成

通过在Java集合类中,查看类继承图和源码可以看出ArrayList和Vector都实现了RandomAccess接口,而LinkList却没有实现该接口,查看RandomAccess接口,发现里面是空的。

RandomAccess.java

package java.util;
/**
 * 一大堆注释...
 */

public interface RandomAccess {
   
}

其实,该接口只是一个标识性接口(Marker),除了RandomAccess接口外,还有Cloneable (可拷贝克隆)、Serializable(被序列化),之后会有文章介绍这两个接口。

该接口的官方解释

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

当施加到顺序访问列表(如LinkedList),用于操纵随机接入列表(如ArrayList)最好算法可以产生二次行为。 鼓励通用列表算法在应用如果应用于顺序访问列表之前提供较差性能的算法,并且如果需要改变其行为以确保可接受的性能,则检查给定列表是否为instanceof此接口。

此循环:

for (int i=0, n=list.size(); i < n; i++)
         list.get(i); 

比这个循环运行得更快:

  for (Iterator i=list.iterator(); i.hasNext(); )
         i.next(); 

Collections类中的使用

此接口在Collections类中有很多地方都使用到了,比如下面的binarySearch方法

Collection.java

@SuppressWarnings("unchecked")
public static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c) {
   
    if (c==null)
        return binarySearch((List<? extends Comparable<? super T>>) list, key);

    if (list instanceof RandomAccess || list.size()<BINARYSEARCH_THRESHOLD)
        return Collections.indexedBinarySearch(list, key, c);
    else
        return Collections.iteratorBinarySearch(list, key
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值