Aprendizaje de ideas de programación Java (2) -Java container

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
Diagrama contenedor Java

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 

Comparación de contenedores

22 artículos originales publicados · Me gusta2 · Visitas 881

Supongo que te gusta

Origin blog.csdn.net/weixin_41685373/article/details/96740134
Recomendado
Clasificación