java 中RandomAccess接口源码分析
java中RandomAccess接口源码分析
RandomAccess是一个接口,位于java.util包中。
这个接口的作用注释写的很清楚了:
/** *MarkerinterfaceusedbyListimplementationstoindicatethat *theysupportfast(generallyconstanttime)randomaccess.Theprimary *purposeofthisinterfaceistoallowgenericalgorithmstoaltertheir *behaviortoprovidegoodperformancewhenappliedtoeitherrandomor *sequentialaccesslists. *List实现所使用的标记接口,用来表明实现了这些接口的list支持快速(通常是常数时间)随机访问。 *这个接口的主要目的是允许一般的算法更改它们的行为,以便在随机或者顺序存取列表时能提供更好的性能。 *Thebestalgorithmsformanipulatingrandomaccesslists(suchas *ArrayList)canproducequadraticbehaviorwhenappliedto *sequentialaccesslists(suchasLinkedList).Genericlist *algorithmsareencouragedtocheckwhetherthegivenlistisan *instanceofthisinterfacebeforeapplyinganalgorithmthatwould *providepoorperformanceifitwereappliedtoasequentialaccesslist, *andtoaltertheirbehaviorifnecessarytoguaranteeacceptable *performance. *操作随机访问列表(如ArrayList)的最佳算法在应用于顺序存取列表时,有可能产生二次项行为。 *泛型算法列表鼓励在将某个算法应用于顺序存取列表可能导致差的性能之前,先检查给定的列表是否是这个接口的一个实例, *并在需要时去改变这些算法的行为以保证性能。 *
Itisrecognizedthatthedistinctionbetweenrandomandsequential *accessisoftenfuzzy.Forexample,someListimplementations *provideasymptoticallylinearaccesstimesiftheygethuge,butconstant *accesstimesinpractice.SuchaListimplementation *shouldgenerallyimplementthisinterface.Asaruleofthumb,a *Listimplementationshouldimplementthisinterfaceif, *fortypicalinstancesoftheclass,thisloop: *随机访问和顺序存取之间的界限通常是模糊的。例如,一些List实现在变得很大时会导致渐进的非线性访问时间,但实际上是常量访问时间。 *这样的List实现通常都应该实现该接口。 *一般来说,某个List实现如果(对某些典型的类的实例来说)满足下面的条件,就应该实现这个接口:循环 *
*for(inti=0,n=list.size();i<n;i++) *list.get(i); **runsfasterthanthisloop: *比下面的循环运行速度快。 **for(Iteratori=list.iterator();i.hasNext();) *i.next(); ** *Thisinterfaceisamemberofthe *
*JavaCollectionsFramework. *这个接口是Java集合框架的一员。 *@since1.4 */ publicinterfaceRandomAccess{ }
RandomAccess是一个空接口,而空接口的作用一般是起到一个标识的作用。
通俗点讲,就是判断一个list是否实现了RandomAcess接口,如果实现了,采用下面所示的简单的for循环进行访问速度比较快:
for(inti=0,n=list.size();i<n;i++) list.get(i);
如果未实现RandomAcess接口,则采用下面的iterator循环访问速度比较快。
for(Iteratori=list.iterator();i.hasNext();) i.next();
判断使用instanceof,即
if(listinstanceofRandomAccess)
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!