Java collection framework (2) -Interfaz de lista

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

Publicado 19 artículos originales · elogiado 0 · visitas 482

Supongo que te gusta

Origin blog.csdn.net/weixin_43244120/article/details/105496895
Recomendado
Clasificación