"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Colecciones

Colecciones

Publicado el 2024-08-10
Navegar:288

La interfaz Colección define las operaciones comunes para listas, vectores, pilas, colas, colas de prioridad y conjuntos.

El marco de colecciones de Java admite dos tipos de contenedores:

  • Uno para almacenar una colección de elementos se llama simplemente colección.
  • El otro, para almacenar pares clave/valor, se llama mapa.

Los mapas son estructuras de datos eficientes para buscar rápidamente un elemento usando una clave. Aquí están las siguientes colecciones.

  • Los conjuntos almacenan un grupo de elementos no duplicados.
  • Las listas almacenan una colección ordenada de elementos.
  • Apila los objetos de la tienda que se procesan según el principio de último en entrar, primero en salir.
  • Las colasalmacenan objetos que se procesan según el principio de primero en entrar, primero en salir.
  • PriorityQueues almacena objetos que se procesan en el orden de sus prioridades.

Las características comunes de estas colecciones se definen en las interfaces y las implementaciones se proporcionan en clases concretas, como se muestra en la figura siguiente.

Image description

Todas las interfaces y clases definidas en Java Collections Framework están agrupadas en el paquete java.util.

El diseño de Java Collections Framework es un excelente ejemplo del uso de interfaces, clases abstractas y clases concretas. Las interfaces definen el marco. Las clases abstractas proporcionan una implementación parcial. Las clases concretas implementan las interfaces con estructuras de datos concretas. Proporcionar una clase abstracta que implemente parcialmente una interfaz hace que al usuario le resulte más cómodo escribir el código. El usuario puede simplemente definir una clase concreta que extienda la clase abstracta en lugar de implementar todos los métodos en la interfaz. Las clases abstractas como AbstractCollection se proporcionan para mayor comodidad. Por este motivo, se denominan clases abstractas de conveniencia.

La interfaz Colección es la interfaz raíz para manipular una colección de objetos. Sus métodos públicos se enumeran en la figura siguiente. La clase AbstractCollection proporciona una implementación parcial para la interfaz Collection. Implementa todos los métodos en Collection excepto los métodos add, size y iterator. Estos se implementan en subclases concretas apropiadas.

Image description

La interfaz Colección proporciona las operaciones básicas para agregar y eliminar elementos en una colección. El método add agrega un elemento a la colección. El método addAll agrega todos los elementos de la colección especificada a esta colección. El método remove elimina un elemento de la colección. El método removeAll elimina los elementos de esta colección que están presentes en la colección especificada. El método retainAll conserva los elementos de esta colección que también están presentes en la colección especificada. Todos estos métodos devuelven booleano. El valor de retorno es true si la colección cambia como resultado de la ejecución del método. El método clear() simplemente elimina todos los elementos de la colección.

Los métodos addAll, removeAll y retainAll son ​​similares a las operaciones de unión, diferencia e intersección de conjuntos.

La interfaz Colección proporciona varias operaciones de consulta. El método size devuelve el número de elementos de la colección. El método contiene comprueba si la colección contiene el elemento especificado. El método containsAll comprueba si la colección contiene todos los elementos de la colección especificada. El método isEmpty devuelve true si la colección está vacía.

La interfaz Collection proporciona el método toArray(), que devuelve una representación de matriz para la colección.

Algunos de los métodos de la interfaz Collection no se pueden implementar en la subclase concreta. En este caso, el método arrojaría java.lang.UnsupportedOperationException, una subclase de RuntimeException. Este es un buen diseño que puedes usar en tu proyecto. Si un método no tiene significado en la subclase, puedes implementarlo de la siguiente manera:

algún método público anulado() {
lanzar una nueva excepción de operación no compatible
("Método no compatible");
}

El siguiente código proporciona un ejemplo para utilizar los métodos definidos en la interfaz Collection.

package demo;
import java.util.*;

public class TestCollection {

    public static void main(String[] args) {
        ArrayList collection1 = new ArrayList();
        collection1.add("New York");
        collection1.add("Atlanta");
        collection1.add("Dallas");
        collection1.add("Madison");

        System.out.println("A list of cities in collection1:");
        System.out.println(collection1);

        System.out.println("\nIs Dallas in collection1? "   collection1.contains("Dallas"));

        collection1.remove("Dallas");
        System.out.println("\n"   collection1.size()   " cities are in collection1 now");

        Collection collection2 = new ArrayList();
        collection2.add("Seattle");
        collection2.add("Portland");
        collection2.add("Los Angeles");
        collection2.add("Atlanta");

        System.out.println("\nA list of cities in collection2:");
        System.out.println(collection2);

        ArrayList c1 = (ArrayList)(collection1.clone());
        c1.addAll(collection2);
        System.out.println("\nCities in collection1 or collection2: ");
        System.out.println(c1);

        c1 = (ArrayList)(collection1.clone());
        c1.retainAll(collection2);
        System.out.print("\nCities in collection1 and collection2: ");
        System.out.println(c1);

        c1 = (ArrayList)(collection1.clone());
        c1.removeAll(collection2);
        System.out.print("\nCities in collection1, but not in 2: ");
        System.out.println(c1);
    }

}

Una lista de ciudades en la colección1:
[Nueva York, Atlanta, Dallas, Madison]
¿Dallas está en la colección1? verdadero
3 ciudades están en la colección1 ahora
Una lista de ciudades en la colección2:
[Seattle, Portland, Los Ángeles, Atlanta]
Ciudades en colección1 o colección2:
[Nueva York, Atlanta, Madison, Seattle, Portland, Los Ángeles, Atlanta]
Ciudades en colección1 y colección2: [Atlanta]
Ciudades en la colección 1, pero no en 2: [Nueva York, Madison]

El programa crea un objeto de colección concreto usando ArrayList (línea 7) e invoca el método contains de la interfaz Collection (línea 16), método remove (línea 18), método size (línea 19), método addAll (línea 31), método retainAll (línea 36), y método removeAll (línea 41).

Para este ejemplo, usamos ArrayList. Puede utilizar cualquier clase concreta de Collection como HashSet, LinkedList, Vector y Stack para reemplazar ArrayList para probar estos métodos definidos en la interfaz Collection.

El programa crea una copia de una lista de matriz (líneas 30, 35, 40). El propósito de esto es mantener intacta la lista de matriz original y usar su copia para realizar operaciones addAll, retainAll y removeAll.

Todas las clases concretas en Java Collections Framework implementan las interfaces java.lang.Cloneable y java.io.Serializable excepto java.util.PriorityQueue no implementa la interfaz Cloneable. Por lo tanto, todas las instancias de Cloneable, excepto las colas de prioridad, se pueden clonar y todas las instancias de Cloneable se pueden serializar.

Declaración de liberación Este artículo se reproduce en: https://dev.to/paulike/collections-3le7?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3