javaのRandomAccessインタフェースのソースコードの分析

3259 ワード

javaのRandomAccessインタフェースのソースコードの分析
RandomAccessは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.
 * List          ,            list    (       )    。
 *                         ,                      。
 * <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.
 *         ( ArrayList)                ,          。
 *                                  ,                    ,
 *                     。
 * <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:

 *                     。  ,  List                     ,           。
 *    List            。
 *     ,  List    (            )       ,         :  
 * <pre>
 *   for (int i=0, n=list.size(); i &lt; 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" rel="external nofollow" >
 * Java Collections Framework</a>.
 *      Java       。
 * @since 1.4
 */
public interface RandomAccess {
}

 RandomAccessは空のインターフェースであり、空のインターフェースの役割は一般的に標識の役割を果たしている。
分かりやすく言えば、リストがRandomAcessインターフェースを実現したかどうかを判断します。もし実現したら、下記の簡単なforサイクルを採用してアクセス速度が比較的速いです。

for (int i=0, n=list.size(); i &lt; n; i++)
   list.get(i);
RandomAcessインターフェースが実現されていない場合は、以下のiteratorの巡回アクセス速度が速いです。

for (Iterator i=list.iterator(); i.hasNext(); )
   i.next();
instance ofを使うと判断します。

 if (list instanceof RandomAccess) 
読んでくれてありがとうございます。みなさんのご協力をお願いします。ありがとうございます。