Cadre de collecte (questions d'entrevue Java)

1. Quelle est la différence entre ArrayList et LinkedList?

L'un utilise un tableau et l'autre utilise une liste chaînée doublement circulaire, les caractéristiques du tableau, les caractéristiques de la liste chaînée

2. La différence entre ArrayList et Vector?

Thread safe et thread unsafe

3. Quelle est la différence entre HashMap et HashTable?

Thread safe et thread unsafe

4. Quelle est la différence entre HashMap et HashSet?

L'implémentation sous-jacente de HashSet consiste à utiliser HashMap, qui hérite presque de toutes les caractéristiques de HashMap

5. Quelle est la différence entre HashTable et ConcurrentHashMap?

HashTable est thread-safe, mais l'efficacité est très faible, donc ConcurrentHashMap a été inventé, qui utilise en interne un mécanisme de verrouillage segmenté, qui est divisé en plusieurs Hashtables, et les verrous entre plusieurs Hashtables ne sont pas partagés, améliorant l'efficacité

6. Classification du cadre de collecte?

Il y a deux ensembles de cadre supérieur blocs, on est une interface Collection Interface Map, la classe d'implémentation d'interface Map ont principalement HashMap, Hashtable,
des propriétés ConcurrentHashMap et similaires (ainsi que la TreeMap a)
Collection de la classe principale a mis en place des interfaces liste ArrayList, Voctor, LinkedList, etc. (Stack), HashSet, etc. sous l'interface Set (TreeSet,
TreeHashSet)

7. Quel est le flux de la méthode put de HashMap?

Déterminez d'abord si la clé est vide. Si elle est nulle, insérez-la directement dans la première position du tableau. Lorsqu'elle n'est pas nulle, calculez la valeur de hachage. Lors du calcul de la
position d'index du tableau d'index via la valeur de hachage , puis utilisez equals via la boucle for. Pour déterminer si la liste chaînée à la position d'indice a la même clé, si elle existe, revenez pour couvrir l'ancienne valeur. Si elle
n'existe pas, déterminez d'abord si une expansion est requise, puis utilisez la méthode d'insertion de tête pour la stocker dans la première position de la liste chaînée. (L'algorithme de hachage ne va pas trop loin pour comprendre, seulement pour
réduire la collision de hachage)

8. Quel est le flux de la méthode get de HashMap?

Calculez la valeur de hachage de la clé, puis calculez la position d'indice de tableau via la valeur de hachage. S'il n'y a pas d'objet Entry dans la position d'indice de tableau, il renvoie null. S'il existe, il parcourt la liste liée et
utilise des égaux pour déterminer.

9. Le processus d'expansion de HashMap? Pourquoi l'expansion est une puissance de 2

Étant donné que la valeur de hachage et la longueur du tableau -1 sont utilisées pour calculer l'index lors du calcul de l'index via la valeur de hachage, afin d'assurer une distribution uniforme, l'indice de tableau -1 converti
en binaire doit être 1, afin que les données puissent être effectuées Réparti uniformément dans le tableau

10. Expansion de la boucle infinie dans le cas du multithreading HashMap

HashMap n'est pas sécurisé par les threads. Dans le cas de plusieurs threads, plusieurs threads développent le tableau en même temps. Une ligne de code qui modifie le pointeur suivant formera A en B
et B en A, provoquant un problème de boucle infinie pendant la traversée. L'utilisation de l'interpolation de queue au lieu de l'interpolation de tête dans jdk1.8 résout ce problème

11. Quelle est la différence entre HashMap1.7 et 1.8?

HashMap de 1.7 utilise la structure de données du tableau et de la liste liée pour stocker les données. En 1.8, il utilise la structure de données du tableau et de la liste liée et de l'arbre rouge et noir pour stocker les données. En 1.8, la
méthode d'interpolation de queue est utilisée à la place de la méthode d'interpolation de tête pour résoudre la boucle d'expansion d'expansion en 1.7. Problème. (Noeud, algorithme de hachage, etc.)

12. Pourquoi faut-il ajouter des arbres rouges et noirs dans 1.8?

Dans les cas extrêmes, la liste chaînée sera infiniment étendue, l'efficacité de la requête de la liste chaînée est relativement faible, la complexité temporelle est O (N) et la complexité temporelle de l'arbre rouge-noir est O (logn), l'efficacité de la requête est
relativement élevée, mais pourquoi ne pas l'utiliser directement Arbres rouge-noir, mais utilisez la liste liée + arbre rouge-noir, car lorsque la longueur de la liste liée est inférieure à 8, l'efficacité de la requête de la liste liée et de l'arbre rouge-noir est
similaire et la liste liée de l'efficacité d'insertion est beaucoup plus grande que l'arbre rouge-noir, lorsque la longueur de la liste liée est supérieure à 8. , L'efficacité de l'utilisation de la requête d'arbre rouge-noir est supérieure à la liste liée, et la
probabilité que la longueur de la liste liée soit supérieure à 8 est très faible, de sorte que l'efficacité d'insertion de l'arbre rouge-noir est également très élevée à l'heure actuelle, compte tenu de la structure de la liste liée + arbre rouge-noir est meilleure que l'utilisation de rouge-noir L'efficacité de l'arbre est élevée

13. Pourquoi la liste chaînée dans Hashmap doit-elle être rouge et noire? Quels sont les avantages?

(1) Améliorez les performances, l'efficacité des requêtes des arbres rouge-noir est supérieure à celle des listes chaînées
(2) La raison de ne pas utiliser les arbres de recherche binaire est que les arbres de recherche binaire dégénèrent en listes liées dans les cas extrêmes
(3) Les arbres rouge-noir ne poursuivent pas l'équilibre complet, par rapport à AVL Pour réduire le nombre de rotations
(4) Si l'arbre rouge-noir est utilisé directement, le coût d'addition est relativement élevé et l'efficacité des requêtes ne sera pas bien pire lorsque la longueur de la liste chaînée est inférieure à 8.

14. Comment calculer la valeur d'index dans HashMap?

La valeur d'indice du tableau est obtenue par le hachage et la longueur du tableau -1 opération de bit

15. Quelle est la différence entre l'algorithme de hachage 1.7 et 1.8?

16. Pourquoi dois-je recalculer la valeur de hachage si j'ai un HashCode?

17. Comment ConcurrentHashMap garantit-il la sécurité des threads?

18. Quelle est la différence entre un tableau et une collection?

(1) La collection peut stocker différents types de données, le tableau ne peut stocker que le même type de données
(2) La collection peut être utilisée pour stocker des données avec une relation de mappage, le tableau ne peut pas
(3) La collection et la longueur peuvent être modifiées, la longueur du tableau est La collection fixed
(4) ne peut stocker que des objets et le tableau peut stocker des types de base

19. Quels sont les types de cadres de collecte?

(1) Les sous-interfaces de l'interface Collection comprennent: l'interface Set et l'interface List
(2) Les classes d'implémentation de l'interface Set sont: HashSet, TreeSet, LinkedHashSet, etc.
(3) Les classes d'implémentation de l'interface List sont: ArrayList, LinkedList, Stack et Vector etc.
(4) Interface Carte classe de mise en œuvre sont principalement: HashMap, TreeMap, Hashtable, ConcurrentHashMap et autres propriétés

20. Règles d'arbre rouge et noir

21. Pourquoi la capacité initiale de HashMap 16?

22. Trois façons pour List de parcourir la collection?

(1) pour
(2) foreach
(3) itérateur
Itérateur it = list.iterator ();
while (it.hasNext ()) {
System.out.println (it.next ());
}

23. Quelle est la différence entre Collection et Collections? Quelles sont les méthodes courantes des collections

Collection: classe ancêtre de classe de
collection Collections: une classe d'assistance pour les classes de collection, fournit une série de méthodes statiques pour implémenter la recherche, le tri, la sécurité des threads et d'autres opérations sur diverses collections

A publié 51 articles originaux · Likes2 · Visites 1852

Je suppose que tu aimes

Origine blog.csdn.net/qq_42972645/article/details/105657368
conseillé
Classement