[align=center][size=large]RandomAccess[/size][/align]
总结:
1.基于 JDK 1.8 源码分析
2.作用
起到判断的作用,即当前集合是否支持随机访问
顺序表(数组形式)还是单链表存储,以便使用更合适的遍历方式
RandomAccess(如ArrayList)还是Sequence List (如LinkedList)
源码:
对于顺序表 for循环通过数组下标访问的效率要高于通过 Iterator 访问的效率;反之,对于单链表要使用 Iterator 方式循环
总结:
所以对大量数据进行遍历时要区分当前的List的实现方式
博文参考:
[url=http://blog.csdn.net/keda8997110/article/details/8635005]RandomAccess接口的使用[/url]
总结:
1.基于 JDK 1.8 源码分析
2.作用
起到判断的作用,即当前集合是否支持随机访问
顺序表(数组形式)还是单链表存储,以便使用更合适的遍历方式
RandomAccess(如ArrayList)还是Sequence List (如LinkedList)
源码:
/*
* @(#)RandomAccess.java 1.9 06/04/21
*
* Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package java.util;
/**
* Marker interface used by <tt>List</tt> implementations to indicate that
* they support fast (generally constant time) random access. The primary
* purpose of this interface is to allow generic algorithms to alter their
* behavior to provide good performance when applied to either random or
* sequential access lists.
*
* <p>The best algorithms for manipulating random access lists (such as
* <tt>ArrayList</tt>) can produce quadratic behavior when applied to
* sequential access lists (such as <tt>LinkedList</tt>). Generic list
* algorithms are encouraged to check whether the given list is an
* <tt>instanceof</tt> this interface before applying an algorithm that would
* provide poor performance if it were applied to a sequential access list,
* and to alter their behavior if necessary to guarantee acceptable
* performance.
*
* <p>It is recognized that the distinction between random and sequential
* access is often fuzzy. For example, some <tt>List</tt> implementations
* provide asymptotically linear access times if they get huge, but constant
* access times in practice. Such a <tt>List</tt> implementation
* should generally implement this interface. As a rule of thumb, a
* <tt>List</tt> implementation should implement this interface if,
* for typical instances of the class, this loop:
* <pre>
* for (int i=0, n=list.size(); i < n; i++)
* list.get(i);
* </pre>
* runs faster than this loop:
* <pre>
* for (Iterator i=list.iterator(); i.hasNext(); )
* i.next();
* </pre>
*
* <p>This interface is a member of the
* <a href="{@docRoot}/../technotes/guides/collections/index.html">
* Java Collections Framework</a>.
*
* @since 1.4
*/
public interface RandomAccess {
}
对于顺序表 for循环通过数组下标访问的效率要高于通过 Iterator 访问的效率;反之,对于单链表要使用 Iterator 方式循环
// ArrayList 的定义
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
// LinkedList 的定义
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable
总结:
所以对大量数据进行遍历时要区分当前的List的实现方式
if (list instance of RandomAccess) {
for(int m = 0; m < list.size(); m++){}
}else{
Iterator iter = list.iterator();
while(iter.hasNext()){}
}
博文参考:
[url=http://blog.csdn.net/keda8997110/article/details/8635005]RandomAccess接口的使用[/url]