JDKドキュメントのランダムアクセスインターフェイスの定義は次のとおりです。
以下は、JDKの注釈の翻訳です
リストは、高速(通常固定時間)ランダムアクセスをサポートすることを示すために使用されるタグ付けインターフェイスを実装します。このインターフェースの主な目的は、一般的なアルゴリズムが動作を変更できるようにすることであり、ランダムまたは連続アクセスリストに適用されると、優れたパフォーマンスを提供することです。
ランダムアクセスリスト(ArrayListなど)を継続的なアクセスリスト(LinkedListなど)に操作するために最適なアルゴリズムを適用すると、2次項の動作を生成できます。アルゴリズムが継続的なアクセスリストに適用される場合、一般リストアルゴリズムを使用して、特定のリストがこのインターフェイスのインスタンスであるかどうかを確認することをお勧めします。
ランダムアクセスと継続的なアクセスの違いはしばしばあいまいであることが現在認識されています。たとえば、リストが大きい場合、一部のリストの実装は増分線形アクセス時間を提供しますが、実際には固定アクセス時間です。このようなリストの実装は、通常、このインターフェイスを実装する必要があります。
強調:JDKで推奨されるのは、リストコレクションのランダムアクセスインターフェイスを可能な限り実装することです
コレクションクラスがランダムアクセスの実装である場合は、イテレータイテレータの代わりに(int i = 0; i <size; i ++)でそれをトラバースしてみてください。
逆に、リストがシーケンスリストである場合、イテレーターを反復型にするのが最適です。
JDKでは、リストのトラバーサルアルゴリズム、特に巨大なサイズで、ランダムアクセス(ArrayListなど)またはシーケンスリスト(LinkedListなど)に属するかどうかを判断する必要があることが明らかです。ランダムアクセスリストに適したトラバーサルアルゴリズムは、シーケンスリストで使用すると非常に異なるためです。一般的に使用される方法は次のとおりです。
判断するために:
if(randomAccessのリストインスタンス){for(int m = 0; m <list.size(); m ++){}} else {iterator iter = list.iterator(); while(iter.hasnext()){}}テスト:
public class testrandomaccess {@test public void testtraverse(){arraylist <integer> arrayList = new arrayList <Integer>(); linkedlist <integer> linkedlist = new linkedlist <integer>(); initlist(arrayList、1000); initlist(linkedlist、1000); System.out.println( "ArrayListはランダムアクセスインターフェイスを実装します"); InprandomAccessTraverse(ArrayList); // system.out.printlnに10msかかりました( "linkedlistはランダムアクセスインターフェイスを実装しません"); InprandomAccessTraverse(linkedlist); // system.out.printlnに434msかかりました( "/narayListはランダムアクセスインターフェイスを実装しません"); noimplrandomaccesstraverse(arrayList); // system.out.printlnに39msかかりました( "linkedlistはランダムアクセスインターフェイスを実装しません"); noimplrandomaccesstraverse(linkedlist); //}プライベートLONG STARTTIME = 0に27msかかりました。プライベートロングエンドタイム= 0; //リストの初期化public void initglist(list <integer> list、int n){for(int i = 0; i <n; i ++){list.add(i); }} //ランダムアクセスインターフェイスを実装するすべてのデータのトラバーサルがあります。 for(int count = 0; count <= 1000; count ++){for(int i = 0; i <list.size(); i ++){list.get(i); }} endtime = system.currenttimemillis(); system.out.println( "ループを使用して合計の反復が必要でした" +(endtime -starttime) + "ms time"); } //ランダムアクセスインターフェイスを実装せずにすべてのデータのトラバーサルpublic void noimplrandomAccesstraverse(list list){starttime = system.currenttimemillis(); for(int count = 0; count <= 1000; count ++){for(iterator itr = list.iterator(); itr.hasnext();){itr.next(); }} endtime = system.currenttimemillis(); System.out.println( "Iteratorを使用して合計の反復がかかりました" +(終了時間 - 開始時刻) + "ms time"); }}Javaインターフェイスのランダムアクセスに関する上記の包括的な理解は、私があなたと共有するすべてのコンテンツです。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。