Maison Java JavaQuestions d'entretien Une question posée dans presque toutes les interviews Java : dites-moi la différence entre ArrayList et LinkedList

Une question posée dans presque toutes les interviews Java : dites-moi la différence entre ArrayList et LinkedList

Jul 26, 2023 pm 03:11 PM
java java面试题

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. 🎜

LinkedListLa 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

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

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 !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

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.

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

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.

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

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.

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

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.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

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

Horodatage à ce jour en Java Horodatage à ce jour en Java Aug 30, 2024 pm 04:28 PM

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.

Programme Java pour trouver le volume de la capsule Programme Java pour trouver le volume de la capsule Feb 07, 2025 am 11:37 AM

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

Créer l'avenir : programmation Java pour les débutants absolus Créer l'avenir : programmation Java pour les débutants absolus Oct 13, 2024 pm 01:32 PM

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.

See all articles