Uso de contenedores comunes de Java
Los contenedores de uso común son
probablemente
-Subclases de lista
ArraryList 和 LinkedList
-Subclases de mapa
HashMap, TreeMap, LinkedHashMap más un ConcurrentHashMap (seguridad concurrente)
-Subclases de conjunto
HashSet, TreeSet
-Cola y subclases (menos utilizadas en otros lugares excepto concurrencia)
Habiendo dicho tantas razones por las cuales estos contenedores son ampliamente utilizados, el primer punto debe serEstructura de datosRazón
Desde el punto de vista de la estructura de datos,
ArrayList es una tabla lineal (generalizada) y LinkedList es una lista vinculada.
El mapa es un par clave-valor.
Set es una colección desordenada sin elementos repetitivos.
Cola
Entonces, ¿por qué no hay pila?
La respuesta es que hay una pila. En la versión inicial, hay una pila basada en vectores. Sabiendo esto, usted sabe que el
creador hereda directamente la pila basada en vectores por simplicidad. Para la pila, las operaciones frecuentes de inserción y eliminación son indudablemente para matrices. Es un desastre, y contiene un método de intervención, que es inconsistente con la estructura de datos en sí.
EntoncesNo recomendado Pila y vector
Para la pila, LinedList puede satisfacer completamente todas las necesidades de la pila. LinkedList también puede reemplazar completamente a Queue.
Robar una foto sigue siendo muy claro
Impresión de contenedores
La impresión de contenedores llama al método String () de forma predeterminada. Se puede reescribir si es necesario, pero no se recomienda reescribir directamente, use el modo adaptador para reescribir.
Muy simple
public class Test {
public static void main(String[] args){
Random random = new Random(11);
List<Integer> list = new ArrayList<>();
Map<Integer,Integer> map = new TreeMap<>();
Set<Integer> set = new LinkedHashSet<>();
for(int i=0;i<5;i++){
list.add(random.nextInt(10));
map.put(i,random.nextInt(10));
set.add(random.nextInt(10));
}
System.out.println(list.toString());
System.out.println(map);
System.out.println(set);
}
}
El resultado:
[8, 5, 0, 7, 7]
{0=8, 1=3, 2=3, 3=4, 4=9}
[1, 7, 3, 4, 2]
Agregar y eliminar contenedores
Para clases bajo la interfaz de Colección
boolean add(E e);
boolean remove(Object o);
boolean addAll(Collection<? extends E> c);
boolean removeAll(Collection<?> c);
Mapa
void putAll(Map<? extends K, ? extends V> m);
void clear();
V put(K key, V value);
default boolean remove(Object key, Object value) ;
Contenedor iterativo o transversal
1. Recorrido del iterador
Para los contenedores de colección solo es necesario llamar al método iterator (). Solo obtén el objeto iterador.
Para los objetos Map, solo el objeto de entrada tiene un método iterador
public static void main(String[] args){
Random random = new Random(11);
List<Integer> list = new ArrayList<>();
Map<Integer,Integer> map = new TreeMap<>();
Set<Integer> set = new LinkedHashSet<>();
for(int i = 0;i < 5;i++){
list.add(random.nextInt(10));
map.put(i,random.nextInt(10));
set.add(random.nextInt(10));
}
// 获取迭代器对象
Iterator<Integer> iterator1 = list.iterator();
Iterator<Integer> iterator2 = set.iterator();
Iterator<Map.Entry<Integer,Integer>> iterator3= map.entrySet().iterator();
while (iterator1.hasNext()){
System.out.print(iterator1.next()+" ");
}
System.out.println();
while (iterator2.hasNext()){
System.out.print(iterator2.next()+" ");
}
System.out.println();
while (iterator3.hasNext()){
Map.Entry entry = iterator3.next();
System.out.print(entry.getKey()+":"+entry.getValue()+" ");
}
System.out.println();
}
8 5 0 7 7
1 7 3 4 2
0:8 1:3 2:3 3:4 4:9
2. La interfaz Iterable se puede recorrer para cada
public static void main(String[] args){
Random random = new Random(11);
List<Integer> list = new ArrayList<>();
Map<Integer,Integer> map = new TreeMap<>();
Set<Integer> set = new LinkedHashSet<>();
for(int i=0;i<5;i++){
list.add(random.nextInt(10));
map.put(i,random.nextInt(10));
set.add(random.nextInt(10));
}
for(Integer num: list){
System.out.print(num+" ");
}
System.out.println();
for(Integer num: set){
System.out.print(num+" ");
}
System.out.println();
for(Map.Entry entry :map.entrySet()){
System.out.print(entry.getKey()+":"+entry.getValue()+" ");
}
System.out.println();
}
8 5 0 7 7
1 7 3 4 2
0:8 1:3 2:3 3:4 4:9