1. Una de las interfaces de colección (interfaz de lista):
Datos de una sola columna, una
lista de colección que define el método de acceso a un grupo de objetos : almacenar datos ordenados y repetibles: "matriz dinámica", reemplazar la matriz original
1. Clase de implementación de la interfaz de lista:
ArrayList: como la clase de implementación principal de la interfaz List, el subproceso es inseguro y altamente eficiente. La capa inferior utiliza Object [] elementDate para almacenar
LinkedList: para operaciones de inserción y eliminación frecuentes, el uso de este tipo de eficiencia es más eficiente que ArrayList. La capa inferior utiliza el almacenamiento de listas doblemente vinculadas
Vector: existía en la versión jdk1.0, básicamente no se usa en desarrollo, seguridad de subprocesos, baja eficiencia, la parte inferior usa Object [] elementDate storage
2. Análisis del código fuente de ArrayList: la capa inferior se instancia cuando se crea un objeto (estilo chino hambriento en modo de caso único)
2.1.jdk7: ArrayList list = new ArrayList (); // La capa inferior crea una matriz de objetos de longitud 10 elementData
list.add (123); // elementData [0] = new Integer (123);
…
list.add ( 11) // Cuando el número de elementos recién agregados excede 10 (la capacidad no es suficiente), la capacidad se expande. Por defecto, la capacidad se expande a 1,5 veces el original.
Al mismo tiempo, los datos en la matriz original deben copiarse en la nueva matriz
Conclusión: se recomienda utilizar un constructor con parámetros: ArrayList list = new ArrayList (int capacidad)
2.2. El cambio de ArrayList en jdk8: el objeto no fue creado cuando fue creado: {}, fue instanciado cuando el complemento se llamó por primera vez (modo de retardo simple)
ArrayList list = new ArrayList (); // El objeto subyacente [ ] La matriz elementData se inicializa en {} y no se crea una matriz de longitud 10
list.add (123); // Cuando se llama por primera vez a add (), la capa inferior crea una matriz de longitud 10 y agrega los datos a elementData [0]
...
list.add (11) // Cuando se agrega nuevamente Si el número de elementos excede 10 (la capacidad no es suficiente), la capacidad se expande. De manera predeterminada, la capacidad se expande a 1,5 veces el original.
Al mismo tiempo, los datos en la matriz original deben copiarse en la nueva matriz.
Conclusión: retrasó la creación de matrices, ahorrando memoria
3. Análisis del código fuente de LinkedList
LinkedList list = new LinkedList (); // El primer y último atributo del tipo Node se crean internamente, el valor predeterminado es null
list.add (123); // 123 se encapsula en Node y se crea el objeto de Node.
Este código refleja Lista doblemente enlazada de LinkedList
Nodo de clase estática privada {Elemento
E;
Nodo siguiente;
Nodo anterior;
Nodo (nodo anterior, elemento E, nodo siguiente) {
this.item = elemento;
this.next = next;
this.prev = prev;
}
}
4.Análisis del código fuente del vector:
Al crear objetos a través del constructor Vector () en jdk7 y 8, la capa inferior ha creado una matriz de longitud 10. Al expandirse, la expansión predeterminada es 2 veces la longitud de la matriz original
5. Métodos comunes en la interfaz de la lista.
1. Agregue el elemento especificado a la posición especificada en la colección.
public void add (índice int, elemento E)
2. addAll booleano (int index, Collection <? Extend E> c)
Inserta todos los elementos de la colección c en la posición especificada. Si la colección cambia, devuelve true, de lo contrario devuelve false.
3. Devuelva el elemento en la posición especificada en la colección.
public E get (int index)
4. Elimine el elemento en la posición especificada en la lista y devuelva el elemento eliminado.
public E remove (int index)
5. Reemplace el elemento en la posición especificada en el conjunto con el elemento especificado y devuelva el elemento antes de la actualización.
conjunto E público (índice int, elemento E)
6, int indexOf (Object o)
devuelve la posición del índice de la primera aparición del objeto o en la colección de la lista, si no hay ningún objeto o en la colección de la lista, entonces devuelve -1
7.int lastIndexOf (Object o)
devuelve la posición del índice del último objeto o en la colección de la lista
8. List subList (int fromIndex, int toIndex)
devuelve el conjunto de elementos del índice fromIndex a toIndex, incluidos el izquierdo y no el derecho
Resumen: Métodos comunes
Agregar: agregar (Objeto o):
Eliminar: eliminar (int índice) / eliminar (Objeto o)
Cambiar: establecer (int índice, Objeto o)
Verificar: obtener (int índice)
Insertar: agregar (int índice, E elemento)
Longitud: tamaño ()
Recorrido: ①Iterador Iterador ② paraCada ③ para
Pregunta de la entrevista: Distinga entre los dos métodos de eliminación en la lista
@Test
public void test2(){
List list = new ArrayList();
list.add(1);
list.add(2);
list.add(3);
updateList(list);
System.out.println(list);//[1, 2]
}
private static void updateList(List list){
// list.remove(2);
list.remove(new Integer(2));
}
@Test
public void test(){
ArrayList list = new ArrayList();
list.add(123);
list.add(456);
list.add(new String("Tom"));
list.add(false);
//详细可见Java集合框架(一)-----Collection接口中的Person类
list.add(new Person("Tom", 20));
list.add(456);
//默认调用toString方法
System.out.println(list);//[123, 456, Tom, false, Person{name='Tom', age=20}]
//1.public void add(int index, E element)
list.add(1,"BB");
System.out.println(list);
//2、boolean addAll(int index, Collection<? extends E> c)
List list1 = Arrays.asList(1,2,3);
list.addAll(list1);
System.out.println(list.size());//9
//3.public E get(int index)
System.out.println(list.get(0));//123
//4.int indexOf(Object o)
int i = list.indexOf(456);
System.out.println(i);//2(前面添加了一个BB),不存在-1
//5.int lastIndexOf(Object o)
System.out.println(list.lastIndexOf(456));
//6.public E remove(int index):可以按照索引和对象两种方法来进行删除
Object remove = list.remove(0);
System.out.println(remove);//返回被删除的元素
System.out.println(list);//[BB, 456, Tom, false, Person{name='Tom', age=20}]
//7.public E set(int index, E element)
list.set(1,"C");
System.out.println(list);
//8、List<E> subList(int fromIndex, int toIndex)
List list2 = list.subList(2, 4);//返回被指定的元素,原来的没有变化
System.out.println(list2);//[Tom, false]
}
6. Preguntas de la entrevista: ArrayList LinkedList Vector
Similitudes: las tres clases implementan la interfaz Lista y las características de almacenamiento de datos son las mismas: almacenamiento de datos ordenados y repetibles
Diferencias: consulte los puntos 1, 2, 3 y 4 anteriores