1. Contenedores y colecciones

Los contenedores o colecciones son clases que te permiten almacenar y procesar varios objetos a la vez. Ya conoces dos tipos de contenedores: matrices y listas.

Java tiene varias docenas de colecciones, cada una de las cuales almacena elementos a su manera específica. Éstos son algunos de ellos:

Recopilación Clase Descripción
List
ArrayList
Lista
LinkedList
Lista enlazada
Vector
Vector
Stack
Pila
Set
HashSet
Colocar
TreeSet
LinkedHashSet
Queue
PriorityQueue
Cola
ArrayQueue
Map
HashMap
Mapa/Diccionario
TreeMap
HashTable

Los nombres son algo ambiguos aquí. En la mayoría de los lenguajes de programación, todas estas estructuras de datos se denominan colecciones, pero no en Java. En Java, algunas de estas clases implementan la Collectioninterfaz, mientras que otras no.

En consecuencia, las colecciones se dividen en colecciones en sentido amplio y colecciones en sentido estricto (solo aquellas que implementan la Collectioninterfaz).

Entonces, para evitar confusiones, cuando hablamos de colecciones nos referimos al sentido estricto de la palabra, es decir, clases que implementan la Collectioninterfaz. Los tipos y Listson todas colecciones. Las colecciones en sentido amplio se denominan generalmente contenedores . Estos incluyen tipos como y matrices.SetQueueMap


2. HashSetcolección

La HashSetclase es una colección de conjuntos típica. En muchos sentidos, es similar a la ArrayListclase. En cierto modo, es una versión más primitiva.

Puede crear un HashSetobjeto usando una declaración como:

HashSet<Type> name = new HashSet<Type>();

Donde Typees el tipo de los elementos que almacenaremos en la HashSetcolección.

La HashSetclase tiene métodos como este:

Método Descripción
void add(Type value)
Agrega el valueelemento a la colección.
boolean remove(Type value)
Elimina el valueelemento de la colección.
Devuelve truesi hubo tal elemento
boolean contains(Type value)
Comprueba si la colección tiene un valueelemento.
void clear()
Borra la colección, eliminando todos los elementos.
int size()
Devuelve el número de elementos de la colección.

Aquí hay un ejemplo del uso de un conjunto.

Escribamos un programa que se despide del usuario si él o ella dice hola. Para hacerlo más interesante, le daremos a nuestro programa la capacidad de entender "hola" en varios idiomas.

Código Nota
HashSet<String> set = new HashSet<String>();

set.add("Hola");
set.add("Hello");
set.add("Hola");
set.add("Bonjour");
set.add("Ciao");
set.add("Namaste");

Scanner console = new Scanner(System.in);
String str = console.nextLine();

if (set.contains(str))
   System.out.println("Goodbye!");
Cree un HashSetobjeto que almacene Stringelementos.


Agregamos saludos en varios idiomas a la setvariable.




Leer una línea desde la consola.


Si la cadena está en nuestro conjunto de saludos, entonces nos despedimos.


3. Establecer

La Setcolección está diseñada para albergar un conjunto de elementos. Por eso se llama Set(conjunto). Esta colección tiene tres características.

Operaciones en un conjunto

Solo hay tres cosas que puede hacer con un conjunto: agregar elementos al conjunto, eliminar elementos del conjunto y verificar si el conjunto contiene un elemento específico. Eso es todo.

Sin orden

Los elementos de esta colección no tienen índices. No puede obtener un elemento por un índice o escribir un valor en una colección en un índice específico. Un conjunto no tiene get()ni set()métodos.

Elementos únicos

Todos los elementos de un conjunto son únicos. A diferencia de una lista, un conjunto puede contener solo una instancia de un elemento. Un objeto está en el conjunto o no; no hay una tercera opción. No puede agregar negro tres veces a un conjunto de colores. O está ahí o no está.

Encontrar elementos

Cuando agrega un nuevo elemento, elimina un elemento o verifica si un elemento existe en un conjunto, se realiza una búsqueda del elemento en el método. El elemento pasado se compara con los elementos de la colección primero por hashCode(), y luego, si los valores devueltos por hashCode()coinciden, por equals().



4. Comparar colecciones: ListvsSet

Comparemos dos tipos de colecciones: Listy SetVeremos las principales diferencias, cuando una es más ventajosa que la otra, y viceversa.

Intentemos comparar List y Set usando juguetes como ejemplo.

La Listcolección (lista) es como un conjunto de juguetes dispuestos a lo largo de la pared en una sala de juegos. Puede agregar un juguete al final de la lista. Si realmente lo necesita, también puede insertarlo en el medio (pero algunos de los juguetes existentes deberán moverse).

Cada juguete tiene un índice. Puede hacer referencia a un juguete por su índice y también reemplazar el juguete número 7 con el juguete número 13. Puede eliminar el juguete número 4 de la lista. Finalmente, puedes aprender el índice de cada juguete en la lista.

La Setcolección (set) es más como una pila de juguetes en el medio del piso. Puede agregar un juguete a la pila y puede quitar un juguete de la pila. Pero estos juguetes no tienen un índice fijo asociado con ellos.

O suponga que está eligiendo un juguete para el cumpleaños de su hijo. Primero, piensa si ya tiene el juguete. Todos los juguetes que ya tiene forman un conjunto de juguetes que no elegirás comprar.

Desde este punto de vista, puede ver que no importa el orden de los juguetes en un conjunto de "juguetes que ya existen", ni si el cumpleañero tiene dos instancias de un juguete en particular. No le interesa el orden ni el número de cada juguete. Lo que te importa es conocer cada juguete único que existe en el set.

Para casos como este, necesita la Setcolección. Su implementación más popular es la HashSetclase.