En primer lugar, observamos ambas categorías que implementan interfaces de lista, y hay tres clases de implementación en la interfaz de la lista, a saber, ArrayList, Vector y LinkedList. La lista se utiliza para almacenar múltiples elementos, puede mantener el orden de los elementos y permite la repetición de elementos.
Las diferencias relevantes entre las tres clases de implementación específicas son las siguientes:
1. ArrayList es la clase de implementación de listas más utilizada, implementada internamente a través de matrices, lo que permite un acceso aleatorio rápido a elementos. La desventaja de las matrices es que no puede haber espaciados entre cada elemento. Cuando no se cumple el tamaño de la matriz, la capacidad de almacenamiento debe aumentar. Es necesario decir que los datos de la matriz ya se copian al nuevo espacio de almacenamiento. Al insertar o eliminar elementos de la posición media de la lista de matrices, la matriz debe copiarse, moverse y el costo es relativamente alto. Por lo tanto, es adecuado para búsquedas y traversales aleatorios, no para inserción y eliminación.
2. El vector también se implementa a través de matrices, la diferencia es que admite la sincronización de subprocesos, es decir, en un momento determinado, solo un hilo puede escribir un vector para evitar la inconsistencia causada por la escritura de múltiples hilos al mismo tiempo, pero cuesta mucho implementar la sincronización, por lo que acceder a él es más lento que el acceso a ArrayList.
3. LinkedList utiliza una estructura de lista vinculada para almacenar datos, que es muy adecuado para la inserción y eliminación dinámica de los datos, y las velocidades de acceso aleatorio y transversal son relativamente lentos. Además, también proporciona métodos que no se definen en la interfaz de la lista, que se utilizan específicamente para operar el encabezado de la tabla y los elementos de cola, y pueden usarse como pilas, colas y colas bidireccionales.
Mirando el código fuente de Java, descubrí que cuando el tamaño de la matriz no es suficiente, necesito recrear la matriz y luego copiar los elementos en la nueva matriz. El tamaño de la matriz extendida de ArrayList y Vector es diferente.
ArrayList:
public boolean add (e e) {EnsureCapacity (tamaño + 1); // Agregar elementos para determinar si pueden acomodarlos. Si no puede, debe crear una nueva matriz elementData [size ++] = e; return true;} public void EnsureCapacity (int mincapacity) {modCount ++; int if (mincapacity> OldCapacity) {Object OldData [] = elementData; // Esta línea no mostró la utilidad, no sé qué están pensando los desarrolladores sobre int newcapacity = (OldCapacity * 3)/2 + 1; // Agregar el tamaño de la nueva matriz if (newCapacity <mincapacity) newCapacity = mincapacity; // La mincapacidad generalmente está cerca del tamaño, por lo que esta es una victoria: elementData = arrays.copyOf (elementData, newCapacity); }}En vector:
privado void asurecapacityHelper (int mincapacity) {int OldCapacity = elementData.length; if (mincapacity> OldCapacity) {object [] OldData = elementData; int newCapacity = (CapacityIncrement> 0)? (OldCapacity + CapacityIncrement): (OldCapacity * 2); if (newCapacity <mincapacity) {newCapacity = mincapacity; } elementData = arrays.copyOf (elementData, newCapacity); }}La diferencia entre ArrayList y Vector es la siguiente:
ArrayList se expande en un 50% + 1 de forma predeterminada cuando no hay memoria insuficiente, y el vector se expande 1 veces por defecto.
Vector proporciona la interfaz IndexOf (OBJ, Start), pero ArrayList no.
Los vectores están en el nivel de seguridad del hilo, pero en la mayoría de los casos, los vectores no se usan porque la seguridad de los subprocesos requiere una mayor sobrecarga del sistema.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.