Una colección de recogida selectiva de Lista preguntas de la entrevista

Vector y ArrayList y LinkedList diferencias y conexiones, así como los respectivos escenarios de aplicación
de seguridad hilo:
Vector: no especificado al crear la capacidad del vector, el tamaño predeterminado es de 10 y la implementación subyacente basada en la matriz, hilo de seguridad, se basan en métodos de sincronización sincronizadas plus cerradura

 

Agregar método

 

 

 

métodos de consulta

 

 

 

 

 

 

 

 

 


ArrayList: Sobre la base de la matriz subyacente,, consulta de alta eficiencia flujos seguros y modificar, añadir y eliminar pero baja eficiencia

Agregar método

 

 

 método de consulta:

 

 

 

 

 

 

 

 

 

LinkedList: estructura subyacente doblemente enlazada lista, seguro para subprocesos, la baja eficiencia de la consulta y modificar, añadir y borrar pero de alta eficiencia

Agregar método

 

 

 métodos de consulta

 

 

 

 

 

 

 

 

 


escenarios de uso:
1.Vector rara vez utilizan
2. Si necesita un gran número de adiciones y supresiones se pueden seleccionar ListaEnlazada
3. Si usted necesita una gran cantidad de consultas y modificar el ArrayList puede elegir


si quiere garantizar ArraList flujos seguros, hay varias maneras?
Tabla 1 a sí mismo escribir una clase de colección ArrayList, de acuerdo con el servicio en la cerradura, add / set / remove general
2 usando List <Object> list = Collections.synchronizedList ( new ArrayList <> ()); // uso de sincronizado de bloqueo
3 nuevo . CopyOnWriteArrayList <> add () ( ""); // usando bloqueo ReentrantLock

entender inferior CopyOnWriteArrayList? , CopyOnWriteArrayList y Collections.synchronizedList ¿Cuál es la diferencia
1 CopyOnWriteArrayList subyace aplicación:
modificación CopyOnWriteArrayList en la ejecución de la operación, se copie un nuevo conjunto de datos, costoso, y después de la modificación del punto de recogida original a la nueva colección para completar la operación
utilizando garantía ReentrantLock una colección de seguridad en un entorno multiproceso

Boolean la opción Agregar pública (E E) { 
	Bloqueo final de ReentrantLock = this.lock; // Obtener una cerradura 
	lock.lock (); // bloqueo 
	el try { 
	  Object [] = getArray elementos (); // obtener la matriz de datos actuales , a elementos 
	  int len = elements.length; // grabar la longitud actual de la matriz 
	  Object [] newElements = Arrays.copyOf (elementos , LEN + 1); // copiar una nueva matriz 
	  newElements [len] = e; // voluntad entre los nuevos datos en la matriz 
	  setArray (newElements); // puntero a la matriz actual nuevos datos 
	  de retorno a la verdadera; 
	} {el fin 
	  lock.unlock (); // Cierre de liberación 
	} 
}

  

escenarios de aplicación CopyOnWriteArrayList: Para una operación de lectura es mucho mayor que el escenario de operación de escritura (No se encierre lectura, acceso directo subyacente)

2 más el Collections.synchronizedList casi todos los métodos subyacentes sincronizado bloqueo
Escena: escribir un mejor rendimiento que CopyOnWriteArrayList pero el rendimiento de lectura de CopyOnWriteArrayList


idea 4 CopyOnWriteArrayList es una especie de cómo, ¿cuáles son las desventajas?
Diseño: lectura y escritura por separado, con el tiempo consistentes
Contras: uso de la memoria, debido a la memoria de copia en escritura, habrá dos objetos espaciales, si el objeto es grande y propenso a YongGC FullGC


5 ArrayList mecanismo de expansión hablar es de la forma
1 .JDK1.8 tamaño predeterminado anterior es 10, la expansión jdk1.7 similar a 1,8, jdk1.6 1,5 veces +1

 2.ArrayList tamaño del conjunto, si no se especifica cuando se crea, por defecto a 0, cuando el tamaño del conjunto se ha especificado, entonces el valor inicial de la especificada
 de tiempo cuando los datos primero añadidos, la expansión es el tamaño del conjunto 10, cada uno de segunda y subsiguiente veces de acuerdo int oldCapacity = elementData.length; newCapacity = oldCapacity + (oldCapacity >> 1), es decir, 1,5 veces la de expansión

 

método para crear el tamaño ArrayList Ir ensureCapacityInternal () especifica cuando el pase en el pasado, si no se especifica el tamaño 0

 

La capacidad inicial predeterminada 10

 

 

 

Si la corriente juez sentencia dictada ArrayList está vacía, la asignación minCapacity, Math.max () y el juicio inicial especificada tan grande, lo puso asignado a minCapacity

A continuación, vaya método ensureExplicitCapacity ()

 

 

La determinación de si el número de pasada en ArrayList mayor que la longitud de la corriente, si es mayor que el producto de expansión, tomar Grow () método y pase minCapacity

 

 

 

 

La longitud de la colección asignado a oldCapacity (capacidad de edad)

newCapacity (nueva capacidad) es igual al valor de oldCapacity + (0,5 * Los valores oldCapacity)

Analizando newCapacity-minCapacity es menor que cero, será menor que si los valores asignados a newCapacity minCapacity

Analizando newCapacity-MAX_ARRAY_SIZE (capacidad máxima ajustada) es mayor que cero, será mayor que si hugeCapacity () devuelve el valor asignado a newCapacity

Una colección de original y volver a copiar a la capacidad asignada en la buena nueva serie de tareas asignadas a la colección original

 

 

 

El minCapacity hacer un juicio si es menor que cero, se informa de error de memoria insuficiente

La determinación de si minCapacity conjunto mayor que la capacidad máxima, si más que el valor máximo será devuelto en el pasado tipo Integer, es menor que la capacidad máxima del conjunto de recopilación volverá más allá de la capacidad máxima

 

 

 

 

Supongo que te gusta

Origin www.cnblogs.com/wishsaber/p/12490742.html
Recomendado
Clasificación