


Une question posée dans presque toutes les interviews Java : dites-moi la différence entre ArrayList et LinkedList
Avant-propos
Bonjour à tous, je suis votre vieil ami Qing Ge, je sais que je vous manque, alors je suis de nouveau là ?
La structure des données de Java est au centre de l'interview. vous avez participé à Java, je pense que tous les étudiants interviewés en ont fait l'expérience. Lorsque les enquêteurs posent de telles questions, ils souhaitent souvent vérifier si vous avez étudié les structures sous-jacentes des types de données couramment utilisés en Java, plutôt que de simplement rester au niveau « savoir comment utiliser ». Alors, comment bien répondre à cette question lors de l’entretien et satisfaire l’intervieweur ?
Dans ce numéro, je me concentrerai sur les points de test haute fréquence JavaAnalysez les principes d'ArrayList et LinkedList
, j'espère que cela pourra vous aider. ArrayList和LinkedList
的原理进行分析,希望能帮助到你。
ArrayList和LinkedList简介
ArrayList
底层是一个Object类型的数组,初始容量是10,支持动态扩容,扩容后的容量是当前容量的1.5倍,它的最大容量是 Integer.MAX_VALUE - 8(但是仍可以扩容到Integer.MAX_VALUE),对于空出的8位,目前的解释是避免一些机器内存溢出,减少出错几率
。
LinkedList
Introduction à ArrayList et LinkedList
🎜 🎜🎜ArrayList La couche inférieure est un tableau de type objet avec une capacité initiale de 10 et prend en charge l'expansion dynamique. La capacité étendue est de 1,5 fois la capacité actuelle. Sa capacité maximale est Integer.MAX_VALUE - 8 (mais elle peut toujours être étendue à Integer.MAX_VALUE). ), pour les 8 bits libérés, l'interprétation actuelle est <code style="font-size: 14px;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin- gauche : 2px ; couleur d'arrière-plan : rgba (27, 31, 35, 0,05) ; famille de polices : « Operator Mono », Consolas, Monaco, Menlo, monospace ; coupure de mot : break-all ; couleur : rgb (239, 112, 96);">Évitez certains débordements de mémoire machine et réduisez les risques d'erreurs. 🎜
LinkedList
La couche inférieure est une liste doublement chaînée. La capacité initiale est de 0. Pour augmentez la capacité, créez-en simplement une nouvelle. Pointez simplement le nœud vers le pointeur. 🎜🎜🎜Afin de le simplifier dans un langage exprimable verbalement afin que les étudiants puissent l'expliquer à l'intervieweur lors de l'entretien, je ne publierai pas ici les instructions auxiliaires du code source. Les étudiants intéressés peuvent vérifier le code source pour voir la structure interne et les méthodes. . Approfondissez votre compréhension de ce domaine. 🎜
Difference
Introduction à ArrayList et LinkedList
🎜 🎜🎜ArrayList La couche inférieure est un tableau de type objet avec une capacité initiale de 10 et prend en charge l'expansion dynamique. La capacité étendue est de 1,5 fois la capacité actuelle. Sa capacité maximale est Integer.MAX_VALUE - 8 (mais elle peut toujours être étendue à Integer.MAX_VALUE). ), pour les 8 bits libérés, l'interprétation actuelle est <code style="font-size: 14px;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin- gauche : 2px ; couleur d'arrière-plan : rgba (27, 31, 35, 0,05) ; famille de polices : « Operator Mono », Consolas, Monaco, Menlo, monospace ; coupure de mot : break-all ; couleur : rgb (239, 112, 96);">Évitez certains débordements de mémoire machine et réduisez les risques d'erreurs. 🎜
LinkedList
La couche inférieure est une liste doublement chaînée. La capacité initiale est de 0. Pour augmentez la capacité, créez-en simplement une nouvelle. Pointez simplement le nœud vers le pointeur. 🎜🎜🎜Afin de le simplifier dans un langage exprimable verbalement afin que les étudiants puissent l'expliquer à l'intervieweur lors de l'entretien, je ne publierai pas ici les instructions auxiliaires du code source. Les étudiants intéressés peuvent vérifier le code source pour voir la structure interne et les méthodes. . Approfondissez votre compréhension de ce domaine. 🎜
Query
ArrayList est très efficace en accès aléatoire, car le stockage des éléments est ordonné et l'emplacement des données interrogées dans la mémoire peut être connu via l'indice index. L'adresse est rapide et la complexité temporelle est O(1); L'efficacité de la requête LinkedList est faible, elle doit parcourir la liste chaînée une par une et la complexité temporelle est O(. n).
Insertion
ArrayList est plus efficace lors de l'insertion de la queue, avec une complexité temporelle de O(1), mais l'efficacité de l'insertion à d'autres emplacements est relativement faible, nécessitant une grande quantité de mouvements de données, avec un temps complexité de O( n); LinkedList est plus efficace pour insérer des éléments en tête et en queue, et la complexité temporelle est O(1). Cependant, pour insérer un élément à une position spécifiée au milieu, vous avez besoin. parcourir pour trouver d’abord la position de l’élément, puis l’insérer, ce qui est complexe Degré O(n).
Delete
La suppression d'éléments d'ArrayList nécessite beaucoup de mouvements de données, à l'exception du nœud final, et la complexité temporelle est O(n); LinkedList est relativement efficace pour supprimer des éléments. il suffit de changer le pointage du pointeur, mais la suppression d'éléments nécessite de parcourir et d'interroger l'emplacement des données, avec une complexité temporelle de O(n).
Espace mémoire
ArrayList est implémenté en fonction des tableaux. La capacité est fixée après chaque extension, donc une partie de l'espace sera réservée à la fin LinkedList est implémentée en fonction de doublement ; listes chaînées, donc chaque nœud En plus de sauvegarder les données, vous devez également sauvegarder les pointeurs des nœuds précédents et suivants, ce qui consommera de l'espace.
Mécanisme d'expansion
ArrayList doit copier les éléments du tableau d'origine dans un nouveau tableau à chaque fois qu'il est développé LinkedList est une liste chaînée et il n'y a pas d'expansion ;
Uniformité
Sécurité des fils
ArrayList et LinkedList sont tous deux dangereux pour les threads et peuvent facilement provoquer des problèmes de lecture sale dans les environnements multithread. Vous pouvez utiliser la méthode Collections.synchronizedList()
pour garantir la sécurité des threads
Fonctionnalités de stockage
Les éléments stockés sont tous ordonnés. répété et les nouveaux éléments sont stockés à la fin de la liste.
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4

Java est un langage de programmation populaire qui peut être appris aussi bien par les développeurs débutants que par les développeurs expérimentés. Ce didacticiel commence par les concepts de base et progresse vers des sujets avancés. Après avoir installé le kit de développement Java, vous pouvez vous entraîner à la programmation en créant un simple programme « Hello, World ! ». Une fois que vous avez compris le code, utilisez l'invite de commande pour compiler et exécuter le programme, et « Hello, World ! » s'affichera sur la console. L'apprentissage de Java commence votre parcours de programmation et, à mesure que votre maîtrise s'approfondit, vous pouvez créer des applications plus complexes.
