Contenedor Jave: interfaz de colección e interfaz de mapa
Hay principalmente interfaz de lista, interfaz de conjunto, interfaz de cola (cola) en la interfaz de colección
Lista representa una colección repetible ordenada (almacenada dentro y fuera), que puede guardar elementos nulos.
Bajo la interfaz: ArrayList , LinkedList , Vector
================================================ ===========
ArrayList : la capa inferior es una matriz de objetos y los datos de la matriz se manipulan mediante subíndices. La longitud inicial de la matriz es 10, cuando el número esté completamente ensamblado, se ampliará a 1,5 veces
/**1. 可以装多个不同类型的数据,初始长度是10个*/
private Object[] value;
/**2. 可以记录当前数据的个数 int size()*/
private int size;
Ventajas: consulta, modificación y adición secuencial más rápidas debido a los subíndices
Desventajas: eliminación e inserción más lentas
================================================ ===============
LinkedList : Basado en variables, la capa inferior es una lista doblemente enlazada
. Los datos, la dirección de la variable anterior y la dirección de la siguiente variable se almacenan en la clase
/**
* 自定义单向链表
*/
private class Node {
/**Object类型变量,用来保存数据*/
Object value;
/**Node类型变量,用来保存下一个Node对象的地址*/
Node next;
public Node(Object value) {
this.value = value;
}
}
Ventajas: eliminar e insertar más rápido, cambiar directamente los puntos de nodo superior e inferior de la posición de eliminación.
Desventajas: consultar, modificar y agregar secuencialmente, porque no hay un subíndice real y es necesario recorrerlo.
================================================ =============
Vector : Es un ArrayList seguro para subprocesos. Los métodos en Vector se sincronizan mediante la palabra clave sincronizada, y la expansión dinámica es 2 veces. (Siempre que se mencione la seguridad de subprocesos, el rendimiento general será bajo)
================================================ ============
4 métodos de recorrido : for, foreach, Iterator (iterador unidireccional), ListIterator (iterador bidireccional)
1. Para: debido a que la lista se basa en una matriz, puede usar subíndices
//通过普通for循环,利用集合size()方法和get(int index) (不常用)
for (int i = 0; i < list.size(); i++) {
//根据下标获取元素
System.out.println(list.get(i));
}
2 、 para cada uno
//()因为ArrayList间接实现了Iterable接口
for (Object object : list) {
System.out.println(object);
}
//lamda表达式
list.foreach(System.out::println);
3. Iterador (iterador unidireccional)
/*
* 迭代器:一个集合对象可以获取多个迭代器对象(多次调用方法),指针都是在初始位置(第一个元素前面)
* 迭代器是靠指针,所以对于这种单向迭代器,只能使用一次
*/
Iterator iterator = list.iterator();//获取单向迭代器对象
//先判断,再获取元素,用while循环,只要有下一个就一直获取
while (iterator.hasNext()) {
//判断是否有下一个元素
//获取当前元素
System.out.println(iterator.next());
//在使用迭代器遍历集合的时候,不能使用集合自己的方法(增删改)操作集合对象
// list.remove(iterator.next());
iterator.remove();//只能使用迭代器自己的方法操作
}
4. listIterator (iterador bidireccional)
ListIterator listIterator = list.listIterator();
//正向迭代
while (listIterator.hasNext()) {
//判断是否有下一个元素
//获取当前元素
System.out.println(listIterator.next());
}
//反向迭代
while (listIterator.hasPrevious()) {
//判断是否有上一个元素
//获取当前元素
System.out.println(listIterator.previous());
}
//所以可以一直用