Maison  >  Article  >  Java  >  Différences entre les questions d'entrevue des collections Java

Différences entre les questions d'entrevue des collections Java

(*-*)浩
(*-*)浩original
2019-11-29 15:49:081536parcourir

Différences entre les questions d'entrevue des collections Java

Quelle est la différence entre HashMap et Hashtable ?

HashMap et Hashtable implémentent tous deux l'interface Map, donc de nombreuses fonctionnalités sont très similaires. Cependant, ils présentent les différences suivantes : HashMap permet aux clés et aux valeurs d'être nulles, tandis que Hashtable ne permet pas aux clés ou aux valeurs d'être nulles. (Étude recommandée : questions d'entretien Java)

Hashtable est synchrone, mais HashMap ne l'est pas. Par conséquent, HashMap est plus adapté aux environnements monothread, tandis que Hashtable convient aux environnements multithread.

HashMap fournit une collection de clés qui peuvent être utilisées pour effectuer une itération. Par conséquent, HashMap est rapide en cas d'échec. D'un autre côté, Hashtable fournit une énumération de clés.

Hashtable est généralement considérée comme une classe héritée.

Quelle est la différence entre un tableau (Array) et une liste (ArrayList) ? Quand devez-vous utiliser Array au lieu d’ArrayList ?

Les différences entre Array et ArrayList sont répertoriées ci-dessous :

Array peut contenir des types de base et des types d'objets, et ArrayList ne peut contenir que des types d'objets.

La taille du tableau est fixe et la taille de l'ArrayList change dynamiquement.

ArrayList fournit plus de méthodes et de fonctionnalités, telles que : addAll(), removeAll(), iterator(), etc. Pour les types de données de base, les collections utilisent le boxing automatique pour réduire les efforts de codage. Cependant, cette approche est relativement lente lorsqu’il s’agit de types de données primitifs de taille fixe.

Quelle est la différence entre ArrayList et LinkedList ?

ArrayList et LinkedList implémentent l'interface List. Ils présentent les différences suivantes :

ArrayList est une interface de données basée sur un index et sa couche inférieure est un tableau. Il peut effectuer un accès aléatoire à des éléments avec une complexité temporelle O(1). En conséquence, LinkedList stocke ses données sous la forme d'une liste d'éléments. Chaque élément est lié à ses éléments précédents et suivants. Dans ce cas, la complexité temporelle de recherche d'un élément est O(n).

Par rapport à ArrayList, les opérations d'insertion, d'ajout et de suppression de LinkedList sont plus rapides car lorsqu'un élément est ajouté à n'importe quelle position de la collection, il n'est pas nécessaire de recalculer la taille ou de mettre à jour l'index comme un tableau.

LinkedList prend plus de mémoire que ArrayList car LinkedList stocke deux références pour chaque nœud, une pointant vers l'élément précédent et une pointant vers l'élément suivant.

Vous pouvez également vous référer à ArrayList vs LinkedList.

A quoi servent les interfaces Comparable et Comparator ? Énumérez leurs différences.

Java fournit l'interface Comparable qui ne contient qu'une seule méthode compareTo(). Cette méthode peut trier deux objets. Plus précisément, il renvoie des nombres négatifs, 0 et positifs pour indiquer que l'objet d'entrée est inférieur, égal ou supérieur à un objet existant.

Java fournit l'interface Comparator contenant deux méthodes : compare() et equals(). La méthode compare() est utilisée pour trier deux paramètres d'entrée et renvoie un nombre négatif, 0. Un nombre positif indique que le premier paramètre est inférieur, égal ou supérieur au deuxième paramètre.

La méthode equals() nécessite un objet comme paramètre, qui est utilisé pour déterminer si le paramètre d'entrée est égal au comparateur. Cette méthode renvoie vrai uniquement si le paramètre d’entrée est également un comparateur et que le résultat du tri du paramètre d’entrée et du comparateur actuel est le même.

Quelle est la différence entre HashSet et TreeSet ?

HashSet est implémenté par une table de hachage, ses éléments ne sont donc pas ordonnés. La complexité temporelle des méthodes add(), remove() et contain() est O(1).

D'autre part, TreeSet est implémenté par une structure arborescente, et les éléments qu'elle contient sont ordonnés. Par conséquent, la complexité temporelle des méthodes add(), remove() et contain() est O(logn).

Quelle est la différence entre HashMap et ConcurrentHashMap ?

ConcurrentHashMap est une implémentation thread-safe de HashMap. Les principales différences sont les suivantes :

ConcurrentHashMap divise l'ensemble du tableau de compartiments en segments, puis utilise des verrous de verrouillage pour protéger chaque segment. Par rapport au verrouillage par mot-clé syn de Hashtable, la granularité est plus fine. mieux. HashMap n'a pas de mécanisme de verrouillage et n'est pas thread-safe.

Les paires clé-valeur de HashMap autorisent null, mais ConCurrentHashMap ne le permet pas

Après JDK8, ConcurrentHashMap permet une nouvelle façon d'implémentation, en utilisant l'algorithme CAS.

List, Set et Map héritent-ils de l'interface Collection ?

List et Set le sont, mais Map ne l'est pas. Map est un conteneur de mappage de paires clé-valeur, qui est évidemment différent de List et Set, stocke des éléments dispersés et n'autorise pas les éléments en double (il en va de même pour les ensembles en mathématiques). List est un conteneur avec une structure linéaire et est). adapté aux valeurs numériques. Accès par index aux éléments.

Nommez les performances de stockage et les fonctionnalités d'ArrayList, Vector et LinkedList ?

ArrayList et Vector utilisent tous deux des tableaux pour stocker des données. Le nombre d'éléments du tableau est plus grand que les données réellement stockées afin que des éléments puissent être ajoutés et insérés. Ils permettent tous deux d'indexer directement les éléments par des numéros de série, mais l'insertion d'éléments implique. les opérations de mémoire telles que le déplacement des éléments du tableau. , donc l'indexation des données est rapide mais l'insertion des données est lente. Étant donné que Vector utilise la méthode synchronisée (sécurité des threads), ses performances sont généralement pires que celles d'ArrayList.

LinkedList utilise une liste doublement chaînée pour implémenter le stockage (associant des unités de mémoire dispersées dans la mémoire via des références supplémentaires pour former une structure linéaire qui peut être indexée par numéro de série. Cette méthode de stockage en chaîne est cohérente avec la méthode de stockage continu Par rapport à (en fait, l'utilisation de la mémoire est plus élevée), l'indexation des données par numéro de série nécessite un parcours vers l'avant ou vers l'arrière, mais lors de l'insertion de données, il vous suffit d'enregistrer les éléments avant et après de cet élément, donc l'insertion. la vitesse est plus rapide.

Vector est un conteneur hérité (les conteneurs utilisés dans les premiers JDK, en plus de Hashtable, Dictionary, BitSet, Stack et Properties sont tous des conteneurs hérités, son utilisation n'est plus recommandée, mais parce qu'ArrayList et LinkedListed). les deux ne sont pas thread-safe. Si vous avez besoin de plusieurs threads pour faire fonctionner le même conteneur, vous pouvez utiliser la méthode SynchronizedList dans la classe d'outils Collections pour le convertir en un conteneur thread-safe avant de l'utiliser (c'est en fait le meilleur exemple de). le mode décoration, qui utilisera la méthode synchroniséList dans la classe outil Collections). L'objet est passé dans le constructeur d'une autre classe pour créer un nouvel objet pour ajouter de nouvelles fonctionnalités).

Quelles sont les caractéristiques de chacune des trois interfaces List, Map et Set lors du stockage des éléments ?

La liste est une collection ordonnée. Grâce à cette interface, vous pouvez contrôler avec précision la position d'insertion de chaque élément. Les utilisateurs peuvent accéder aux éléments d'une liste à l'aide d'un index (la position de l'élément dans la liste, similaire à un indice de tableau), similaire aux tableaux Java.

Set est une collection qui ne contient pas d'éléments en double, c'est-à-dire que deux éléments e1 et e2 ont e1.equals(e2)=false et Set a au plus un élément nul.

Interface Map : veuillez noter que Map n'hérite pas de l'interface Collection Map fournit un mappage clé-valeur

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:
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