Présentons d'abord les connaissances d'Arraylist :
(Partage de vidéos d'apprentissage : vidéo d'enseignement Java)
Arraylist : Le la couche inférieure est basée sur un tableau dynamique. Selon le tableau suivant, l'accès aléatoire aux éléments du tableau est très efficace, et l'ajout d'éléments à la queue du tableau est très efficace
Cependant, la suppression de données ; dans le tableau et l'ajout de données au milieu du tableau sont inefficaces, car le tableau doit être déplacé. Par exemple, le pire des cas consiste à supprimer le premier élément du tableau, ce qui nécessite d'avancer d'un bit chacun les éléments du deuxième au nième élément du tableau. La raison pour laquelle on l'appelle tableau dynamique est que l'Arraylist peut être étendue lorsque les éléments du tableau dépassent sa capacité (pour JDK1.8, la capacité du tableau après expansion est 1,5 fois celle avant l'expansion. La plus grande capacité du tableau dans l'Arraylist). le code source est Integer .MAX_VALUE-8, pour les 8 bits libérés, l'explication actuelle est :
①Mots d'en-tête de stockage
②Pour éviter certains débordements de mémoire machine et réduire les risques d'erreurs, allouez donc less;
③ Il peut toujours prendre en charge jusqu'à Integer.MAX_VALUE (quand Integer.MAX_VALUE-8 ne peut toujours pas répondre à la demande).
Ce qui suit fait partie du code source d'Arraylist : Extension d'Arraylist :
(plus de questions d'entretien à partager : questions et réponses d'entretien Java )
Ajouter des données à la liste de tableaux : (ajouter à la fin du tableau)
Ajouter un tableau à la position spécifiée du tableau :
On peut voir que tant que la capacité actuelle d'ArrayList est suffisamment grande, l'opération add() à la fin du tableau est très efficace lors de l'ajout de données. À la position spécifiée du tableau, un grand nombre d'opérations de déplacement et de copie du tableau seront effectuées. Lorsque le tableau est copié, la méthode System.arraycopy() sera finalement appelée, donc l'efficacité de l'opération add() est encore assez élevée. Même ainsi, il est toujours plus lent que Linkedlist lors de l'ajout de données à un emplacement spécifié. Ce dernier n'a besoin que de changer le pointeur pour ajouter des données. Supprimer un tableau dans Arraylist nécessite également de déplacer le tableau, ce qui est plus lent.
Linkedlist est un tableau dynamique basé sur des listes chaînées. L'ajout et la suppression de données sont efficaces et ne nécessitent que de changer le pointeur. Cependant, l'efficacité moyenne de l'accès aux données est faible et la liste chaînée doit être parcourue. Arraylist obtient le code source de données : (selon l'accès à l'indice, haute efficacité)
Code source de données d'accès à la liste liée : (la fonction node() parcourt la liste chaînée)
Résumé :
1. Pour un accès aléatoire, ArrayList est meilleur que LinkedList car LinkedList doit déplacer le pointeur.
Pour les opérations de création et de suppression d'ajout et de suppression, LinedList a un avantage car ArrayList doit déplacer les données.
2. Problèmes d'efficacité respectifs :
Recommandations associées : Tutoriel d'introduction à Java
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!