La définition de l'interface aléatoire dans le document JDK est la suivante: Interface publique RandomAccess
Ce qui suit est la traduction de l'annotation de JDK
La liste implémente l'interface de balise utilisée pour indiquer qu'il prend en charge l'accès aléatoire rapide (généralement à temps fixe). L'objectif principal de cette interface est de permettre aux algorithmes généraux de modifier leur comportement, fournissant ainsi de bonnes performances lorsqu'elles sont appliquées à des listes d'accès aléatoires ou continues.
Lors de l'application du meilleur algorithme pour faire fonctionner les listes d'accès aléatoires (telles que ArrayList) à une liste d'accès continue (telle que LinkedList), le comportement du terme quadratique peut être généré. Si un algorithme est appliqué à une liste d'accès continue, il est encouragé à utiliser un algorithme de liste générale pour vérifier si une liste donnée est une instance de cette interface avant d'appliquer un algorithme qui peut fournir de mauvaises performances et pour modifier son comportement si des performances acceptables sont nécessaires.
Il a maintenant été reconnu que la différence entre l'accès aléatoire et continu est souvent vague. Par exemple, si la liste est grande, certaines implémentations de la liste fournissent un temps d'accès linéaire incrémentiel, mais sont en fait du temps d'accès fixe. Une telle implémentation de la liste doit généralement implémenter cette interface.
Impact: Ce qui est recommandé dans JDK est d'implémenter l'interface aléatoire pour les collections de liste autant que possible
Si la classe de collecte est une implémentation de RandomAccess, essayez de la traverser pour (int i = 0; i <size; i ++) au lieu de l'itérateur itérateur.
Inversement, si la liste est une liste de séquences, il est préférable d'itérer avec un itérateur.
Il est clair dans le JDK que dans l'algorithme de traversée de la liste, en particulier la taille énorme, nous devons essayer de déterminer s'il appartient à RandomAccess (tel que ArrayList) ou à la liste de séquences (tels que LinkedList). Parce que l'algorithme de traversée adapté à la liste RandomAccess est très différent lorsqu'il est utilisé sur la liste de séquences. La méthode couramment utilisée est:
Pour porter un jugement:
if (list instance of randomaccess) {for (int m = 0; m <list.size (); m ++) {}} else {iterator iter = list.iterator (); while (iter.hasnext ()) {}}test:
classe publique TestRandomAccess {@Test public void testTaverse () {ArrayList <Integer> ArrayList = new ArrayList <Integer> (); LinkedList <Integer> LinkedList = new LinkedList <Integer> (); initList (ArrayList, 1000); InitList (LinkedList, 1000); System.out.println ("ArrayList implémente RandomAccess Interface"); imprandomaccessStaverse (ArrayList); // il a fallu 10 ms à System.out.println ("LinkedList n'implémente pas l'interface RandomAccess"); imprandomaccessStVerse (LinkedList); // il a fallu 434 ms à System.out.println ("/ NarrayList n'implémente pas l'interface RandomAccess"); NOIMPLRANDOMACCESSSTVERVELT (ArrayList); // il a fallu 39 ms à System.out.println ("LinkedList n'implémente pas l'interface RandomAccess"); NOIMPLRANDOMACCESSSTVERVELT (LinkedList); // il a fallu 27 ms pour} private Long starttime = 0; Fin de fin de longue durée = 0; // Initialisez la liste publique void initlist (list <Integer> list, int n) {for (int i = 0; i <n; i ++) {list.add (i); }} // Il existe une traversée de toutes les données qui implémente l'interface RandomAccess, public void imprandomaccessStVerse (list list) {starttime = system.currentTimemillis (); for (int count = 0; count <= 1000; count ++) {for (int i = 0; i <list.size (); i ++) {list.get (i); }} endtime = System.currentTimemillis (); System.out.println ("Il a fallu un total d'itération à l'aide de la boucle" + (Fintime - démarrage) + "MS Time"); } // La traversée de toutes les données sans implémenter l'interface aléatoire public void noMplrandomAccessStraverse (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 ("Il a fallu un total d'itérations en utilisant Iterator" + (EndTime - Starttime) + "MS Time"); }}La compréhension complète ci-dessus de l'interface Java RandomAccess est tout le contenu que je partage avec vous. J'espère que vous pourrez vous faire référence et j'espère que vous pourrez soutenir Wulin.com plus.