Die Definition der RandomAccess -Schnittstelle im JDK -Dokument lautet wie folgt: öffentliche Schnittstelle RandomAccess
Das Folgende ist die Übersetzung von JDKs Annotation
List implementiert die Tagging-Schnittstelle, die verwendet wird, um anzuzeigen, dass sie einen schnellen (normalerweise festen Zeit-) Zufallszugriff unterstützt. Der Hauptzweck dieser Schnittstelle ist es, allgemeine Algorithmen zu ermöglichen, ihr Verhalten zu ändern und so eine gute Leistung zu bieten, wenn sie auf zufällige oder kontinuierliche Zugriffslisten angewendet werden.
Wenn Sie den besten Algorithmus für den Betrieb von Zufallszugriffslisten (z. B. ArrayList) auf eine kontinuierliche Zugriffsliste (z. B. LinkedList) anwenden, kann das Verhalten des quadratischen Begriffs generiert werden. Wenn ein Algorithmus auf eine kontinuierliche Zugriffsliste angewendet wird, wird er aufgefordert, einen allgemeinen Listenalgorithmus zu verwenden, um zu überprüfen, ob eine bestimmte Liste eine Instanz dieser Schnittstelle ist, bevor ein Algorithmus angewendet wird, der möglicherweise eine schlechte Leistung liefert, und ihr Verhalten zu ändern, wenn eine akzeptable Leistung erforderlich ist.
Es wurde nun erkannt, dass der Unterschied zwischen zufälligem und kontinuierlichem Zugang oft vage ist. Wenn die Liste beispielsweise groß ist, bieten einige Listenimplementierungen eine inkrementelle lineare Zugriffszeit an, sind jedoch tatsächlich festgelegt. Eine solche Listenimplementierung sollte in der Regel diese Schnittstelle implementieren.
Betonen Sie: Was in JDK empfohlen wird
Wenn die Sammelklasse eine Implementierung von ZufallAccess ist, versuchen Sie, sie für (int i = 0; i <Größe; i ++) anstelle von Iterator -Iterator zu durchqueren.
Wenn die Liste umgekehrt eine Sequenzliste ist, ist es am besten, mit einem Iterator zu iterieren.
In der JDK ist klar, dass wir im Traversal -Algorithmus der Liste, insbesondere der großen Größe, versuchen sollten, festzustellen, ob es zu RandomAccess (z. B. ArrayList) oder Sequenzliste (z. B. LinkedList) gehört. Da der für die ZufallAccess -Liste geeignete Traversalalgorithmus bei Verwendung in der Sequenzliste sehr unterschiedlich ist. Die häufig verwendete Methode ist:
Ein Urteil fällen:
if (listinstance von randomAccess) {for (int m = 0; m <list.size (); m ++) {}} else {iterator iter = list.iterator (); while (iter.hasnext ()) {}}prüfen:
public class testrandomaccess {@test public void testTraverse () {ArrayList <GanzEger> ArrayList = new ArrayList <GanzEger> (); LinkedList <NeGeger> linkedList = new LinkedList <GanzEger> (); InitList (ArrayList, 1000); initList (linkedList, 1000); System.out.println ("ArrayList implementiert eine zufällige Schnittstelle"); einfallsgemäß (ArrayList); // Es dauerte 10 ms an System.out.println ("LinkedList implementiert keine RandomAccess -Schnittstelle"); implandomaccesstraverse (LinkedList); // Es dauerte 434 ms an system.out.println ("/carrayList implementiert keine zufällige Schnittstelle"); NoimPlrandomaccesstraverse (ArrayList); // Es dauerte 39 ms zu System.out.println ("LinkedList implementiert keine RandomAccess -Schnittstelle"); NoimPlrandomaccesstraverse (LinkedList); // Es dauerte 27 ms, um private lange Startzeiten = 0 zu sein; private lange Endzeit = 0; // Initialisieren Sie die Liste public void initList (Liste <Integer> Liste, int n) {für (int i = 0; i <n; i ++) {list.add (i); }} // Es gibt eine Durchführung aller Daten, die die RandomAccess -Schnittstelle implementiert, public void implandomaccesstraverse (Listliste) {startTime = system.currentTimillis (); für (int count = 0; count <= 1000; count ++) {für (int i = 0; i <list.size (); i ++) {list.get (i); }} endzeit = system.currentTimemillis (); System.out.println ("Es dauerte eine Gesamtzahl der Iteration mit Loop" + (Endime - StartTime) + "MS Time"); } // Die Durchführung aller Daten ohne Implementierung der RandomAccess -Schnittstelle public void noimPlrandomaccesstraverse (Listliste) {startTime = System.currentTimemillis (); für (int count = 0; count <= 1000; count ++) {für (iterator itr = list.iterator (); itr.hasnext ();) {itr.Next (); }} endzeit = system.currentTimemillis (); System.out.println ("Es dauerte insgesamt Iterationen mit Iterator" + (Endime - StartTime) + "MS -Zeit"); }}Das obige umfassende Verständnis der Java -Schnittstelle RandomAccess ist der gesamte Inhalt, den ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.