Marco de recopilación (preguntas de la entrevista Java)

1. ¿Cuál es la diferencia entre ArrayList y LinkedList?

Uno usa una matriz y el otro usa una lista enlazada doblemente circular. Características de las matrices y listas enlazadas

2. La diferencia entre ArrayList y Vector?

Hilo seguro e hilo inseguro

3. ¿Cuál es la diferencia entre HashMap y HashTable?

Hilo seguro e hilo inseguro

4. ¿Cuál es la diferencia entre HashMap y HashSet?

La implementación subyacente de HashSet es usar HashMap, que casi hereda todas las características de HashMap

5. ¿Cuál es la diferencia entre HashTable y ConcurrentHashMap?

HashTable es seguro para subprocesos, pero la eficiencia es muy baja, por lo que se inventó ConcurrentHashMap, que utiliza internamente un mecanismo de bloqueo segmentado, que se divide en múltiples Hashtables, y los bloqueos entre múltiples Hashtables no se comparten, lo que mejora la eficiencia

6. Clasificación del marco de recolección?

Hay dos intersecciones de nivel superior en el marco de la colección, una es la interfaz del Mapa y la otra es la interfaz de la Colección. Bajo la interfaz del Mapa, las principales clases de implementación son HashMap, HashTable,
ConcurrentHashMap y Properties (y hay un TreeMap)
. ArrayList, Voctor, LinkedList, etc. (Stack), HashSet, etc. en la interfaz Set (TreeSet,
TreeHashSet)

7. ¿Cuál es el flujo del método put de HashMap?

Primero determine si la clave está vacía. Si es nula, insértela directamente en la primera posición de la matriz. Cuando no sea nula, calcule el valor hash. Cuando calcule la
posición de índice de la matriz índice a través del valor hash , luego use iguales a través del bucle for. Para determinar si la lista vinculada en la posición del subíndice tiene la misma clave, si existe, vuelva a cubrir el valor anterior. Si
no existe, primero determine si se requiere expansión y luego use el método de inserción de cabezales para almacenarla en la primera posición de la lista vinculada. (El algoritmo de hash no va demasiado para entender, solo para
reducir la colisión de hash)

8. ¿Cuál es el flujo del método get de HashMap?

Calcule el valor hash de la clave y luego calcule la posición del subíndice de la matriz a través del valor hash. Si no hay ningún objeto de entrada en la posición del subíndice de la matriz, devuelve nulo. Si existe, atraviesa la lista vinculada y
utiliza iguales para determinar.

9. ¿El proceso de expansión de HashMap? ¿Por qué la expansión es una potencia de 2?

Debido a que el valor hash y la longitud de la matriz -1 se utilizan para calcular el índice al calcular el índice a través del valor hash, para garantizar una distribución uniforme, el subíndice de la matriz -1 convertido
a binario debe ser 1, de modo que los datos puedan hacerse Distribuido uniformemente en la matriz

10. Expansión de bucle infinito en el caso de HashMap multithreading

HashMap no es seguro para subprocesos. En el caso de subprocesos múltiples, varios subprocesos expanden la matriz al mismo tiempo. Una línea de código que cambia el siguiente puntero formará A a B
y B a A, causando un problema de bucle infinito durante el recorrido. El uso de la interpolación de cola en lugar de la interpolación de cabeza en jdk1.8 resuelve este problema

11. ¿Cuál es la diferencia entre HashMap1.7 y 1.8?

HashMap de 1.7 utiliza la estructura de datos de la matriz y la lista vinculada para almacenar datos. En 1.8, utiliza la estructura de datos de la matriz y la lista vinculada y el árbol rojo y negro para almacenar datos. En 1.8, se utiliza el
método de interpolación de cola en lugar del método de interpolación de cabeza para resolver el bucle de expansión de expansión en 1.7. Problema (Nodo, algoritmo hash, etc.)

12. ¿Por qué necesitas agregar árboles rojos y negros en 1.8?

En casos extremos, la lista vinculada se extenderá infinitamente, la eficiencia de la consulta de la lista vinculada es relativamente baja, la complejidad temporal es O (N) y la complejidad temporal del árbol rojo-negro es O (log), la eficiencia de la consulta es
relativamente alta, pero ¿por qué no usarla directamente? Árboles rojo-negros, pero use la lista vinculada + árbol rojo-negro, porque cuando la longitud de la lista vinculada es menor que 8, la eficiencia de consulta de la lista vinculada y el árbol rojo-negro es
similar, y la lista vinculada de eficiencia de inserción es mucho más grande que el árbol rojo-negro, cuando la longitud de la lista vinculada es mayor que 8. , La eficiencia del uso de la consulta del árbol rojo-negro es mayor que la lista vinculada, y la
probabilidad de que la longitud de la lista vinculada sea mayor que 8 es muy baja, por lo que la eficiencia de inserción del árbol rojo-negro también es muy alta en este momento, considerando que la estructura de la lista vinculada + árbol rojo-negro es mejor que usar el rojo-negro La eficiencia del árbol es alta

13. ¿Por qué la lista vinculada en Hashmap debe ser roja y negra? ¿Cuáles son los beneficios?

(1) Mejore el rendimiento, la eficiencia de consulta de los árboles rojo-negros es mayor que la de las listas vinculadas
(2) La razón para no usar árboles de búsqueda binarios es que los árboles de búsqueda binarios se degenerarán en listas vinculadas en casos extremos
(3) Los árboles rojo-negros no buscan un equilibrio completo, en comparación con AVL Para reducir el número de rotaciones
(4) Si el árbol rojo-negro se usa directamente, el costo de adición es relativamente alto y la eficiencia de la consulta no será mucho peor cuando la longitud de la lista vinculada sea menor que 8.

14. ¿Cómo calcular el valor del índice en HashMap?

El valor del subíndice de matriz se obtiene mediante la operación de hash y longitud de matriz -1 bit

15. ¿Cuál es la diferencia entre el algoritmo Hash 1.7 y 1.8?

16. ¿Por qué tengo que volver a calcular el valor hash si tengo un HashCode?

17. ¿Cómo garantiza ConcurrentHashMap la seguridad de los subprocesos?

18. ¿Cuál es la diferencia entre una matriz y una colección?

(1) La colección puede almacenar diferentes tipos de datos, la matriz solo puede almacenar el mismo tipo de datos
(2) La colección se puede usar para almacenar datos con una relación de mapeo, la matriz no puede
(3) La colección y la longitud se pueden cambiar, la longitud de la matriz La
colección fija (4) solo puede almacenar objetos, y la matriz puede almacenar tipos básicos

19. ¿Cuáles son los tipos de marcos de recopilación?

(1) Las subinterfaces de la interfaz de Colección incluyen: Establecer interfaz e Interfaz de lista
(2) La clase de implementación de la interfaz Establecer incluye principalmente: HashSet, TreeSet, LinkedHashSet, etc.
(3) La clase de implementación de la interfaz Lista incluye principalmente: ArrayList, LinkedList, Stack y Vector etc
(4) Mapa clase de implementación de la interfaz son principalmente: HashMap, TreeMap, Hashtable, ConcurrentHashMap y similares Propiedades

20. reglas del árbol rojo y negro

21. ¿Por qué es la capacidad inicial de HashMap 16?

22. ¿Tres maneras para que la Lista atraviese la colección?

(1) para
(2) foreach
(3) iterador
Iterador it = list.iterator ();
while (it.hasNext ()) {
System.out.println (it.next ());
}

23. ¿Cuál es la diferencia entre Colección y Colecciones? ¿Cuáles son los métodos comunes de colecciones?

Colección: clase de colección clase ancestro
Colecciones: una clase auxiliar para clases de colección, proporciona una serie de métodos estáticos para implementar operaciones de búsqueda, clasificación, seguridad de hilos y otras operaciones en varias colecciones

51 artículos originales publicados · Me gusta2 · Visitas 1852

Supongo que te gusta

Origin blog.csdn.net/qq_42972645/article/details/105657368
Recomendado
Clasificación