<code><br><br></code>
上面代码中标识的一行, FILL_THRESHOLD 是25,就是说,如果要填充的目标List范围不是很大,那么就直接用上面的方式效率比较高,同时注意到 list instanceof RamdomAccess 这个代码,顺便翻到里面去瞅了一眼,RamdomAccess 接口是一个空接口,空接口的作用一般起到一个标识作用,比如:Serializable 接口。
RaomdomAccess接口里面的文档说明大致意思:给可以提供随机访问的List实现去标识一下,这样使用这个List的程序在遍历这种类型的List的时候可以有更高效率。仅此而已。
所以,我们在遍历List之前,可以用 if( list instanceof RamdomAccess ) 来标识一下,选择用哪种遍历方式。
测试代码:
<span style="color: #0000ff">package</span><span style="color: #000000"> com.zslin.list.demo;
</span><span style="color: #0000ff">import</span><span style="color: #000000"> java.util.ArrayList;
</span><span style="color: #0000ff">import</span><span style="color: #000000"> java.util.Iterator;
</span><span style="color: #0000ff">import</span><span style="color: #000000"> java.util.LinkedList;
</span><span style="color: #0000ff">import</span><span style="color: #000000"> java.util.List;
</span><span style="color: #0000ff">import</span><span style="color: #000000"> java.util.RandomAccess;
</span><span style="color: #008000">//</span><span style="color: #008000">JDK中说的很清楚,在对List特别是Huge size的List的遍历算法中,
</span><span style="color: #008000">//</span><span style="color: #008000"> 要尽量来判断是属于RandomAccess(如ArrayList)还是Sequence List (如LinkedList),
</span><span style="color: #008000">//</span><span style="color: #008000"> 因为适合RandomAccess List的遍历算法,用在Sequence List上就差别很大,常用的作法就是:
</span><span style="color: #008000">//</span><span style="color: #008000"> 要作一个判断:
</span><span style="color: #008000">//</span><span style="color: #008000"> if (list instance of RandomAccess) {
</span><span style="color: #008000">//</span><span style="color: #008000"> for(int m = 0; m < list.size(); m++){}
</span><span style="color: #008000">//</span><span style="color: #008000"> }else{
</span><span style="color: #008000">//</span><span style="color: #008000"> Iterator iter = list.iterator();
</span><span style="color: #008000">//</span><span style="color: #008000"> while(iter.hasNext()){}
</span><span style="color: #008000">//</span><span style="color: #008000"> }</span>
<span style="color: #008000">/**</span><span style="color: #008000">
*
* </span><span style="color: #808080">@author</span><span style="color: #008000"> WQ<br>
* </span><span style="color: #808080">@version</span><span style="color: #008000"> 创建时间:2017年6月18日 下午6:01:14<br>
</span><span style="color: #008000">*/</span>
<span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span><span style="color: #000000"> TestRandomAccess {
</span><span style="color: #008000">//</span><span style="color: #008000"> 初始化列表</span>
<span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> initList(List list, <span style="color: #0000ff">int</span><span style="color: #000000"> n) {
</span><span style="color: #0000ff">for</span> (<span style="color: #0000ff">int</span> i = 0; i < n; i++<span style="color: #000000">) {
list.add(i);
}
}
</span><span style="color: #008000">//</span><span style="color: #008000"> 使用循环进行对列表的迭代</span>
<span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span><span style="color: #000000"> traverseWithLoop(List list) {
</span><span style="color: #0000ff">long</span> starttime = 0<span style="color: #000000">;
</span><span style="color: #0000ff">long</span> endtime = 0<span style="color: #000000">;
starttime </span>=<span style="color: #000000"> System.currentTimeMillis();
</span><span style="color: #0000ff">for</span> (<span style="color: #0000ff">int</span> count = 0; count <= 1000; count++<span style="color: #000000">) {
</span><span style="color: #0000ff">for</span> (<span style="color: #0000ff">int</span> i = 0; i < list.size(); i++<span style="color: #000000">) {
list.get(i);
}
}
endtime </span>=<span style="color: #000000"> System.currentTimeMillis();
System.out.println(</span>"使用loop迭代一共花了" + (endtime - starttime) + "ms时间"<span style="color: #000000">);
}
</span><span style="color: #008000">//</span><span style="color: #008000"> 使用迭代器对列表进行迭代</span>
<span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span><span style="color: #000000"> traverseWithIterator(List list) {
</span><span style="color: #0000ff">long</span> starttime = 0<span style="color: #000000">;
</span><span style="color: #0000ff">long</span> endtime = 0<span style="color: #000000">;
starttime </span>=<span style="color: #000000"> System.currentTimeMillis();
</span><span style="color: #0000ff">for</span> (<span style="color: #0000ff">int</span> count = 0; count <= 1000; count++<span style="color: #000000">) {
</span><span style="color: #0000ff">for</span> (Iterator itr =<span style="color: #000000"> list.iterator(); itr.hasNext();) {
itr.next();
}
}
endtime </span>=<span style="color: #000000"> System.currentTimeMillis();
System.out.println(</span>"使用Iterator迭代一共花了" + (endtime - starttime) + "ms时间"<span style="color: #000000">);
}
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span><span style="color: #000000"> traverse(List list) {
</span><span style="color: #0000ff">long</span> starttime = 0<span style="color: #000000">;
</span><span style="color: #0000ff">long</span> endtime = 0<span style="color: #000000">;
</span><span style="color: #0000ff">if</span> (list <span style="color: #0000ff">instanceof</span><span style="color: #000000"> RandomAccess) {
System.out.println(</span>"该list实现了RandomAccess接口"<span style="color: #000000">);
starttime </span>=<span style="color: #000000"> System.currentTimeMillis();
</span><span style="color: #0000ff">for</span> (<span style="color: #0000ff">int</span> count = 0; count <= 1000; count++<span style="color: #000000">) {
</span><span style="color: #0000ff">for</span> (<span style="color: #0000ff">int</span> i = 0; i < list.size(); i++<span style="color: #000000">) {
list.get(i);
}
}
endtime </span>=<span style="color: #000000"> System.currentTimeMillis();
System.out.println(</span>"迭代一共花了" + (endtime - starttime) + "ms时间"<span style="color: #000000">);
} </span><span style="color: #0000ff">else</span><span style="color: #000000"> {
System.out.println(</span>"该list未实现RandomAccess接口"<span style="color: #000000">);
starttime </span>=<span style="color: #000000"> System.currentTimeMillis();
</span><span style="color: #0000ff">for</span> (<span style="color: #0000ff">int</span> count = 0; count <= 1000; count++<span style="color: #000000">) {
</span><span style="color: #0000ff">for</span> (Iterator itr =<span style="color: #000000"> list.iterator(); itr.hasNext();) {
itr.next();
}
}
endtime </span>=<span style="color: #000000"> System.currentTimeMillis();
System.out.println(</span>"迭代一共花了" + (endtime - starttime) + "ms时间"<span style="color: #000000">);
}
}
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span><span style="color: #000000"> main(String[] args) {
ArrayList arraylist </span>= <span style="color: #0000ff">new</span><span style="color: #000000"> ArrayList();
LinkedList linkedlist </span>= <span style="color: #0000ff">new</span><span style="color: #000000"> LinkedList();
initList(arraylist, </span>1000<span style="color: #000000">);
initList(linkedlist, </span>1000<span style="color: #000000">);
traverse(arraylist);
traverse(linkedlist);
traverseWithIterator(arraylist);
traverseWithLoop(arraylist);
traverseWithIterator(linkedlist);
traverseWithLoop(linkedlist);
}
}</span>
运行结果如下:
<span style="color: #000000">该list实现了RandomAccess接口 迭代一共花了9ms时间 该list未实现RandomAccess接口 迭代一共花了10ms时间 使用Iterator迭代一共花了12ms时间 使用loop迭代一共花了7ms时间 使用Iterator迭代一共花了14ms时间 使用loop迭代一共花了396ms时间</span>
以上。
关于接口 RandomAccess
标签:count string print tor 作用 set mil util ram
本文系统来源:http://www.cnblogs.com/mr-wuxiansheng/p/7044899.html
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!