ArrayList
https://classroom.github.com/assignment-invitations/32e19c107fce8d0750dbbae9e655dda7 Hemos visto en el tema de Arrays que éstos tienen un tamaño definido en el momento de la creación y que este tamaño es inmutable.
Si queremos usar este tipo de estructura pero que pueda cambiar el tamaño, usaremos ArrayList
1
2
import java.util.ArrayList;
ArrayList<String> coches = new ArrayList<String>();
El método para añadir elementos es add
1
coches.add("Seat")
Para acceder al elemento iésimo get
1
coches.get(0);
Para conocer su tamaño, size
1
System.out.printf("Existen %d coches%n", coches.size());
Para eliminar el elemento iésimo, remove
1
coches.remove(0);
Para recorrerlo usamos un for each
1
2
3
for(String coche: coches){
System.out.println(coche);
}
Si necesitamos ordenarlos,
1
2
3
4
import java.util.Collections;
...
Collections.sort(coches);
...
Si queremos comprobar si un dato ya está en la lista:
1
2
3
4
5
ArrayList<Integer> nums = new ArrayList<>();
nums.add(1);
nums.add(5);
System.out.println(nums.contains(1)); //true
System.out.println(nums.contains(3)); //false
Vamos a ver unos cuantos ejemplos.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// Java program to Demonstrate List Interface
// Importing all utility classes
import java.util.*;
// Main class
// ListDemo class
class GFG {
// Main driver method
public static void main(String[] args)
{
//Crear un objeto de la interface List
//Implementado por la clase ArrayList
List<Integer> l1 = new ArrayList<Integer>();
// Añadir elementos
l1.add(0, 1);
l1.add(1, 2);
// Imprimir los elementos del array
System.out.println(l1);
List<Integer> l2 = new ArrayList<Integer>();
l2.add(1);
l2.add(2);
l2.add(3);
//Añadirá todos los elementos de l2 a partir del índice 1
l1.addAll(1, l2);
System.out.println(l1);
// Elimina el elemento 1 del array
l1.remove(1);
System.out.println(l1);
// Imprime el elemento en la posición 3 mediante get
System.out.println(l1.get(3));
//Reemplaza el elemento 0 por el número 5
l1.set(0, 5);
// Again printing the updated List 1
System.out.println(l1);
}
}
Salida
1
2
3
4
5
[1, 2]
[1, 1, 2, 3, 2]
[1, 2, 3, 2]
2
[5, 2, 3, 2]
Añadir elementos
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// Java Program to Add Elements to a List
// Importing all utility classes
import java.util.*;
// Main class
class GFG {
// Main driver method
public static void main(String args[])
{
// Creating an object of List interface,
// implemented by ArrayList class
List<String> al = new ArrayList<>();
// Adding elements to object of List interface
// Custom elements
al.add("Geeks");
al.add("Geeks");
al.add(1, "For");
// Print all the elements inside the
// List interface object
System.out.println(al);
}
}
Salida
1
[Geeks, For, Geeks]
Actualizar elementos
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// Java Program to Update Elements in a List
// Importing utility classes
import java.util.*;
// Main class
class GFG {
// Main driver method
public static void main(String args[])
{
// Creating an object of List interface
List<String> al = new ArrayList<>();
// Adding elements to object of List class
al.add("Geeks");
al.add("Geeks");
al.add(1, "Geeks");
// Display theinitial elements in List
System.out.println("Initial ArrayList " + al);
// Setting (updating) element at 1st index
// using set() method
al.set(1, "For");
// Print and display the updated List
System.out.println("Updated ArrayList " + al);
}
}
1
2
Initial ArrayList [Geeks, Geeks, Geeks]
Updated ArrayList [Geeks, For, Geeks]
Eliminar elementos
Para eliminar un elemento de una lista, podemos usar el método remove()
. Este método está sobrecargado para realizar múltiples operaciones basadas en diferentes parámetros.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// Java Program to Remove Elements from a List
// Importing List and ArrayList classes
// from java.util package
import java.util.ArrayList;
import java.util.List;
// Main class
class GFG {
// Main driver method
public static void main(String args[])
{
// Creating List class object
List<String> al = new ArrayList<>();
// Adding elements to the object
// Custom inputs
al.add("Geeks");
al.add("Geeks");
// Adding For at 1st indexes
al.add(1, "For");
// Print the initialArrayList
System.out.println("Initial ArrayList " + al);
// Now remove element from the above list
// present at 1st index
al.remove(1);
// Print the List after removal of element
System.out.println("After the Index Removal " + al);
// Now remove the current object from the updated
// List
al.remove("Geeks");
// Finally print the updated List now
System.out.println("After the Object Removal " + al);
}
}
Salida
1
2
3
Initial ArrayList [Geeks, For, Geeks]
After the Index Removal [Geeks, Geeks]
After the Object Removal [Geeks]
Iterar por una lista
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// Java program to Iterate the Elements
// in an ArrayList
// Importing java utility classes
import java.util.*;
// Main class
public class GFG {
// main driver method
public static void main(String args[])
{
// Creating an empty Arraylist of string type
List<String> al = new ArrayList<>();
// Adding elements to above object of ArrayList
al.add("Geeks");
al.add("Geeks");
// Adding element at specified position
// inside list object
al.add(1, "For");
// Using for loop for iteration
for (int i = 0; i < al.size(); i++) {
// Using get() method to
// access particular element
System.out.print(al.get(i) + " ");
}
// New line for better readability
System.out.println();
// Using for-each loop for iteration
for (String str : al)
// Printing all the elements
// which was inside object
System.out.print(str + " ");
}
}
Salida
1
2
Geeks For Geeks
Geeks For Geeks
Método | Descripción |
---|---|
add(int index, Object element) | Este método se utiliza para insertar un elemento específico en un índice de posición específico en una lista. |
add(Object o) | Este método se usa para agregar un elemento específico al final de una lista. |
addAll(Collection C) | Este método se usa para agregar todos los elementos de una colección específica al final de la lista mencionada. |
addAll(int index, Collection C) | Se utiliza para insertar todos los elementos que comienzan en la posición especificada de una colección específica en la lista mencionada. |
clear() | Este método se utiliza para eliminar todos los elementos de cualquier lista. |
contains(Object o) | Devuelve verdadero si esta lista contiene el elemento especificado. |
forEach(Consumer action) | Realiza la acción dada para cada elemento del iterable hasta que se hayan procesado todos los elementos o la acción genere una excepción. |
get(int index) | Devuelve el elemento en la posición especificada en esta lista. |
indexOf(Object O) | Se devuelve el índice de la primera aparición de un elemento específico, o -1 en caso de que el elemento no esté en la lista. |
isEmpty() | Devuelve verdadero si esta lista no contiene elementos. |
lastIndexOf(Object O) | Se devuelve el índice de la última aparición de un elemento específico o -1 en caso de que el elemento no esté en la lista. |
listIterator() | Devuelve un iterador de lista sobre los elementos de esta lista (en la secuencia adecuada). |
listIterator(int index) | Devuelve un iterador de lista sobre los elementos de esta lista (en la secuencia adecuada), comenzando en la posición especificada en la lista. |
remove(int index) | Elimina el elemento en la posición especificada en esta lista. |
remove(Object o) | Elimina la primera aparición del elemento especificado de esta lista, si está presente. |
removeAll(Collection c) | Elimina de esta lista todos sus elementos que están contenidos en la colección especificada. |
removeIf(Predicate filter) | Elimina todos los elementos de esta colección que satisfacen el predicado dado. |
removeRange(int fromIndex, int toIndex) | Elimina de esta lista todos los elementos cuyo índice se encuentra entre fromIndex , inclusive, y toIndex , exclusivo. |
retainAll(Collection c) | Conserva solo los elementos de esta lista que están contenidos en la colección especificada. |
set(int index, E element) | Reemplaza el elemento en la posición especificada en esta lista con el elemento especificado. |
size() | Devuelve el número de elementos de esta lista. |
subList(int fromIndex, int toIndex) | Devuelve una vista de la parte de esta lista entre fromIndex , inclusive, y toIndex , exclusivo. |
toArray() | Este método se utiliza para devolver una matriz que contiene todos los elementos de la lista en el orden correcto. |
toArray(Object O) | También se usa para devolver una matriz que contiene todos los elementos de esta lista en el orden correcto, igual que el método anterior. |
Fuente https://www.geeksforgeeks.org/list-interface-java-examples/
Ejercicio Coches
(F)
(ra3.b, ra3.f, ra5.c, ra6.b, ra6.e, ra6.c)
Realiza un programa que permita al usuario añadir marcas de coches mediante la consola. Si escribe una línea en blanco, se acabará de añadir marcas.
Al final debe imprimirlas ordenadas en líneas separadas
Ejercicio Altura
(M)
(ra3.b, ra3.f, ra5.c, ra6.b, ra6.e, ra6.c)
Programa Java que pida por teclado las alturas de N alumnos de una clase y las guarde en un ArrayList
de tipo Double.
A continuación el programa calculará la altura media de todos los alumnos, cuántos alumnos hay más altos que la media y cuantos más bajos.
Para resolverlo vamos a utilizar 6 métodos además del método main
:
- Método
numeroAlumnos()
: este método pide por teclado el número de alumnos de la clase y devuelve dicho número al programa principal. - Método
leerAlturas()
: pide por teclado las alturas de los N alumnos y las almacena en elArrayList
. Este método recibe como parámetros elArrayList
inicialmente vacío y el número de alumnos a leer. - Método
calcularMedia()
: calcula y devuelve la media de los alumnos de la clase. Este método recibe como parámetro elArrayList
con las alturas de todos los alumnos. - Método
calcularAlumnosAlturaSuperior
: Este método recibe como parámetro elArrayList
con las alturas de todos los alumnos y devuelve el número de alumnos con una altura superior a la media - Método
calcularAlumnosAlturaInferior
: Este método recibe como parámetro elArrayList
con las alturas de todos los alumnos y devuelve el número de alumnos con una altura inferior a la media - Método
mostrarResultados()
: muestra por pantalla todas las alturas y calcula y muestra el número de alumnos con altura superior e inferior a la media. Recibe como parámetros elArrayList
con las alturas de todos los alumnos y la media calculada anteriormente.
Repartiendo regalos en tu calle (D)
(ra3.b, ra3.f, ra5.c, ra6.b, ra6.e, ra6.c)
Papá Noel quiere repartir juguetes a todos los niños de la mejor calle del mundo: la tuya. Para ello, consulta una lista de los portales de esa calle en los que debe dejar regalos.
La forma en la que reparte los regalos es peculiar. Aterriza con su trineo en un portal determinado (que no tiene por qué ser uno en los que tiene que dar regalos), y luego sigue las siguientes reglas:
- Reparte los regalos al portal que tiene más cerca de su posición actual.
- La distancia entre dos portales es el valor absoluto de su resta. Es decir, la distancia entre el portal 10 y el portal 8 es 2 (10 − 8 = 2), lo mismo que la distancia entre el portal 8 y el portal 10 (valor absoluto de 8 − 10).
- Si dos portales están a igual distancia, siempre va hacia el que tiene el número más grande.
¿Cuál es el orden en el que visita los portales?
La entrada constará de 2 parámetros: el número de portal en el que aterriza y una lista con todos los portales que ha de visitar.
Por ejemplo, 0, 2, 4
Indica que aterriza en el portal 0 y tiene que repartir al 2 y al 4.
Y la salida será
1
2, 4
3, 2, 5, 1
cuya salida será
1
2 1 5
y 3, 2, 4, 7
cuya salida será
1
4 2 7
Fuente https://www.aceptaelreto.com/problem/statement.php?id=367
HashMap, TreeMap y LinkedHashMap
Esta clases: HashMap
, TreeMap
y LinkedHashMap
nos permite almacenar elementos asociando a cada clave un valor.
Para cada clave tenemos un valor asociado. Podemos después buscar fácilmente un valor para una determinada clave.
Algunos ejemplos donde podríamos usar un Mapa:
- Guardar en la clave un País y en el valor su Capital
- Crear una lista con NIA`s de alumnos y sus nombres
Ejemplo
Almacenar un diccionario las palabras en castellano como ‘clave’ y las traducciones de las mismas en el ‘valor’.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.util.HashMap;
import java.util.Map;
public class PruebaHashMap {
public static void main(String[] args) {
Map<String, String> mapa1 = new HashMap<String, String>();
mapa1.put("rojo", "red");
mapa1.put("verde", "green");
mapa1.put("azul", "blue");
mapa1.put("blanco", "white");
System.out.println("Listado completo de valores");
for (String valor : mapa1.values())
System.out.print(valor + "-");
System.out.println();
System.out.println("Listado completo de claves");
for (String clave : mapa1.keySet())
System.out.print(clave + "-");
System.out.println();
System.out.println("La traducción de 'rojo' es:" + mapa1.get("rojo"));
if (!mapa1.containsKey("negro"))
System.out.println("No existe la clave 'negro'");
System.out.println("La traducción de 'marron' es:" + mapa1.getOrDefault("marrón", "No existe la clave marrón"));
mapa1.remove("rojo");
System.out.println(mapa1);
}
}
La clase HashMap
debe implementar la interfaz Map
, así que se declara como;
1
Map<String, String> mapa1 = new HashMap<String, String>();
La clase HashMap
utiliza datos genéricos tanto para la clave como para el valor, en este ejemplo la clave y el valor son datos de tipo String.
Mediante el método put
agregamos un elemento a la colección de tipo HashMap
:
1
2
3
4
mapa1.put("rojo", "red");
mapa1.put("verde", "green");
mapa1.put("azul", "blue");
mapa1.put("blanco", "white");
Para imprimir todos los valores del mapa lo recorremos mediante un for-each
:
1
2
for (String valor : mapa1.values())
System.out.print(valor + "-");
De forma similar si queremos recorrer todas las claves del mapa:
1
2
for (String clave : mapa1.keySet())
System.out.print(clave + "-");
Para recuperar un valor para una determinada clave llamamos al método get
y le pasamos la clave a buscar, si dicha clave no existe en el mapa se nos retorna el valor null
:
1
System.out.println("La traducción de 'rojo' es:" + mapa1.get("rojo"));
Si queremos verificar si una determinada clave existe en el mapa lo hacemos mediante el método containsKey
:
1
2
if (mapa1.containsKey("negro"))
System.out.println("No existe la clave 'negro'");
Una variante del método get
es getOrDefault
que nos retorna el segundo parámetro si no encuentra la clave en el mapa:
1
2
System.out.println("La traducción de 'marron' es:" +
mapa1.getOrDefault("marrón", "No existe la clave marrón"));
Para eliminar un elemento de la colección debemos hacer uso del método remove
, pasamos una clave del mapa:
1
mapa1.remove("rojo");
Para imprimir el mapa completo en la Consola podemos hacer uso del método println
:
1
System.out.println(mapa1);
Hemos utilizado la clase HashMap
para resolver el problema. La clase TreeMap
es idéntica a HashMap
con la salvedad que mantiene ordenado los datos por la clave.
Finalmente la clase LinkedHashMap
mantiene ordenado los elementos del mapa según el orden de inserción.
Ejercicio PaisCapital.java
(F)
(ra3.b, ra3.f, ra5.c, ra6.b, ra6.e, ra6.c)
Declara un HashMap
que almacene el país y la capital de varios países Europeos. Luego realiza un programa que pida un País al usuario y muestre su capital.
Teléfonos (F)
(ra3.b, ra3.f, ra5.c, ra6.b, ra6.e, ra6.c)
Queremos tener un guía de teléfonos que asocie un número de teléfono a un contacto. El programa debe pedir un contacto y mostrar su número asociado
Teléfonos II (F)
(ra3.b, ra3.f, ra5.c, ra6.b, ra6.e, ra6.c)
Se trata de implementar el ejercicio anterior pero un contacto puede tener más de un teléfono:
Pista
Utiliza un
ArrayList
como valor para poder almacenar más de un teléfono
1 2 HashMap<String, ArrayList<String>> agenda = new HashMap<>();Ahora para añadir los teléfonos de Pepe
1 2 3 4 5 6 7 8 9 10 ArrayList<String> telefonos = new ArrayList<>(); telefonos.add("667761"); telefonos.add("+0034 44001"); agenda.put("Pepe", telefonos); // Para empezar a dar de alta los números del siguiente contacto es necesario usar // new ArrayList<>() pues de lo contrario la lista sería compartida por todos! telefonos = new ArrayList<>(); telefonos.add("94884"); telefonos.add("34535"); agenda.put("Juan", telefonos);Para comprobar que debemos usar
new ArrayList<>();
comenta dicha línea e inspecciona el valor de los teléfonos de Pepe o Juan. Comprobarás que los dos tienen los mismos teléfonos
La mejor terminación (M)
(ra3.b, ra3.f, ra5.c, ra6.b, ra6.e, ra6.c)
En los sorteos de la lotería más mediáticos, como el del Gordo de Navidad o el del Niño, es habitual que los fetichistas busquen números con algún tipo de significado extraño o que los matemáticos y estadísticos se entretengan informando sobre los números más habituales.
Esto último es interesante si queremos maximizar la probabilidad de ganar algo. Dado que los números que terminan con el mismo dígito que el del premio principal tienen un reintegro, una buena forma de intentar, al menos, no perder dinero es jugar un número con la terminación más habitual en el histórico de sorteos.
Siendo puristas, la probabilidad de que salga un número es independiente de lo que haya ocurrido en años anteriores. Pero es tan tentador ignorar esto que no puedes resistirte.
La entrada consistirá en un array con varios boletos de lotería y la salida será cuántas veces se repite una terminación (sólo el último dígito).
Por ejemplo, "00004", "03847", "39804"
1
{4=2, 7=1}
O, "58975", "25894", "52985", "98598"
1
{4=1, 5=2, 8=1}
-
Fuente https://www.aceptaelreto.com/problem/statement.php?id=387
Ejercicio Botín
(M)
(ra3.b, ra3.f, ra5.c, ra6.b, ra6.e, ra6.c)
Al-Colleja y sus secuaces tienen que repartir el botín de su último golpe. No es una tarea fácil, porque todos quieren llevarse lo máximo posible, y todos están armados…
Para no entrar en discusiones que terminen en tragedia, Al-Colleja ha ideado un sencillo método en el que, en lugar de preocuparse de ser justos repartiendo en base a quién ha trabajado más en la consecución del golpe, se lo deja prácticamente todo al azar. Prefiere recibir menos beneficios pero mantener la banda intacta.
El procedimiento es sencillo. Coge todos los billetes conseguidos y los pone en un montón tras barajarlos. Después se coloca toda la banda en círculo y va dando un billete a cada uno, hasta que quedan todos repartidos. Eso sí, el primero que recibe billete es él, de esa forma se asegura de que si los billetes se terminan a mitad de una vuelta, él siempre habrá recibido uno adicional.
El componente de azar aparece porque los billetes están descolocados, así que puede tocar en el reparto desde el mísero billete de 10 hasta el deseado de 500…
La entrada constará de 2 partes: la primera es el número e participantes en el golpe y la segunda un array con los billetes a repartir.
Por ejemplo: 2, 10, 20, 50, 200, 500
que producirá como salida
1
{0=10 50 500, 1=20 200} //esta es la salida usando toString. Debes devolver el Mapa
O 3, 50, 20, 100, 200, 500, 10, 50
que resultará en
1
{0=50 200 50, 1=20 500, 2=100 10} //esta es la salida usando toString. Debes devolver el Mapa
Pista
La única dificultad de este ejercicio es hacer que la ronda de reparto sea circular. Es decir, que cuando llegue al último comience por el primero.
Acuérdate de cómo hicimos el ejercicio del DNI
Fuente
https://www.aceptaelreto.com/problem/statement.php?id=238
Ejercicio Frequency
(F)
(ra3.b, ra3.f, ra5.c, ra6.b, ra6.e, ra6.c)
Se trata de pedir por pantalla una serie de palabras y calcular la frecuencia de cada una de ellas, es decir, las veces que se repiten. Para finalizar el programa se debe introducir una línea en blanco Por ejemplo:
1
uno dos dos tres tres tres
Daría como resultado:
1
2
3
uno - 1
dos - 2
tres - 3
Ejercicio Anagramas
(M)
(ra3.b, ra3.f, ra5.c, ra5.d, ra6.b, ra6.e, ra6.c)
Un anagrama es un grupo de palabras que contienen las mismas letras pero en diferente orden:
Por ejemplo: alma, mala
El ejercicio consiste en leer todas las líneas de un fichero. Por cada palabra que encuentra crea una entrada en el mapa con la palabra alfabetizada con las letras en orden alfabético como clave. Siguiendo el ejemplo, aalm
Y en el valor crea un ArrayList
con todas las palabras con las mismas letras.
Es decir, la clave aalm
tendrá una lista con dos valores: alma
y mala
.
Después se pide un número (minGroupSize
) que es el mínimo número de valores para que salga impreso por pantalla
Para leer un archivo línea a línea, usa el siguiente código:
1
2
3
4
5
6
7
8
9
10
11
12
13
import java.io.*;
import java.util.*;
public class Anagramas {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader("path-to-file"));
String line;
while ((line = reader.readLine())!=null) {
//Trabajar con line
}
reader.close();
}
}
Para ordenar una cadena por orden alfabético, usa el siguiente código;
1
2
3
4
5
private static String alphabetize(String s) {
char[] a = s.toCharArray();
Arrays.sort(a);
return new String(a);
}
Ejemplo CountCountries
(M)
(ra3.b, ra3.f, ra5.c, ra5.d, ra6.b, ra6.e, ra6.c)
En el siguiente ejercicio partimos de un fichero csv
que almacena los datos de los alumnos, incluido el país de origen que se almacena en el campo 7 de dicho archivo.
Se trata de contar cuántos alumnos pertenecen a cada país.
Luego el programa deberá mostrar la cantidad de alumnos de un país pasado como parámetro:
Acuérdate que en algún ejercicio hemos dividido un array en palabras. Ahora se trata de dividirlo por la
,
Para sumar 1 a la lista de países;
1 2 3 //Cogemos el campo 7 de la línea. // Si no está esa clave, la ponemos, la inicializamos a 0 y luego sumamos 1 map.put(splittedLine[6], map.getOrDefault(splittedLine[6] , 0) + 1);
HashSet
Es una colección desordenada de objetos en la que no pueden existir duplicados.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// Java program Illustrating Set Interface
// Importing utility classes
import java.util.*;
// Main class
public class HashSet1 {
// Main driver method
public static void main(String[] args)
{
// Demonstrating Set using HashSet
// Declaring object of type String
Set<String> hash_Set = new HashSet<String>();
// Adding elements to the Set
// using add() method
hash_Set.add("Geeks");
hash_Set.add("For");
hash_Set.add("Geeks");
hash_Set.add("Example");
hash_Set.add("Set");
// Printing elements of HashSet object
System.out.println(hash_Set);
}
}
Salida
1
[Set, Example, Geeks, For]
Ejemplo de unión, intersección y diferencia de HashSet
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// Java Program Demonstrating Operations on the Set
// such as Union, Intersection and Difference operations
// Importing all utility classes
import java.util.*;
// Main class
public class SetExample {
// Main driver method
public static void main(String args[])
{
// Creating an object of Set class
// Declaring object of Integer type
Set<Integer> a = new HashSet<Integer>();
// Adding all elements to List
a.addAll(Arrays.asList(
new Integer[] { 1, 3, 2, 4, 8, 9, 0 }));
// Again declaring object of Set class
// with reference to HashSet
Set<Integer> b = new HashSet<Integer>();
b.addAll(Arrays.asList(
new Integer[] { 1, 3, 7, 5, 4, 0, 7, 5 }));
// To find union
Set<Integer> union = new HashSet<Integer>(a);
union.addAll(b);
System.out.print("Union of the two Set");
System.out.println(union);
// To find intersection
Set<Integer> intersection = new HashSet<Integer>(a);
intersection.retainAll(b);
System.out.print("Intersection of the two Set");
System.out.println(intersection);
// To find the symmetric difference
Set<Integer> difference = new HashSet<Integer>(a);
difference.removeAll(b);
System.out.print("Difference of the two Set");
System.out.println(difference);
}
}
Salida
1
2
3
Union of the two Set[0, 1, 2, 3, 4, 5, 7, 8, 9]
Intersection of the two Set[0, 1, 3, 4]
Difference of the two Set[2, 8, 9]
Pilas
El marco de Java Collection proporciona una clase Stack
que modela e implementa una estructura de datos de tipo pila. La clase se basa en el principio básico de último en entrar, primero en salir.
Stack es una estructura de datos lineal que sigue un orden particular en el que se realizan las operaciones. El orden puede ser LIFO (Last In First Out) o FILO (First In Last Out).
El siguiente diagrama muestra la jerarquía de la clase Stack:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// Java code for stack implementation
import java.io.*;
import java.util.*;
class Test
{
// Pushing element on the top of the stack
static void stack_push(Stack<Integer> stack)
{
for(int i = 0; i < 5; i++)
{
stack.push(i);
}
}
// Popping element from the top of the stack
static void stack_pop(Stack<Integer> stack)
{
System.out.println("Pop Operation:");
for(int i = 0; i < 5; i++)
{
Integer y = (Integer) stack.pop();
System.out.println(y);
}
}
// Displaying element on the top of the stack
static void stack_peek(Stack<Integer> stack)
{
Integer element = (Integer) stack.peek();
System.out.println("Element on stack top: " + element);
}
// Searching element in the stack
static void stack_search(Stack<Integer> stack, int element)
{
Integer pos = (Integer) stack.search(element);
if(pos == -1)
System.out.println("Element not found");
else
System.out.println("Element is found at position: " + pos);
}
public static void main (String[] args)
{
Stack<Integer> stack = new Stack<Integer>();
stack_push(stack);
stack_pop(stack);
stack_push(stack);
stack_peek(stack);
stack_search(stack, 2);
stack_search(stack, 6);
}
}
Salida
1
2
3
4
5
6
7
8
9
Pop Operation:
4
3
2
1
0
Element on stack top: 4
Element is found at position: 3
Element not found
Añadir elementos
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// Java program to add the
// elements in the stack
import java.io.*;
import java.util.*;
class StackDemo {
// Main Method
public static void main(String[] args)
{
// Default initialization of Stack
Stack stack1 = new Stack();
// Initialization of Stack
// using Generics
Stack<String> stack2 = new Stack<String>();
// pushing the elements
stack1.push(4);
stack1.push("All");
stack1.push("Geeks");
stack2.push("Geeks");
stack2.push("For");
stack2.push("Geeks");
// Printing the Stack Elements
System.out.println(stack1);
System.out.println(stack2);
}
}
1
2
[4, All, Geeks]
[Geeks, For, Geeks]
Acceder a un elemento
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// Java program to demonstrate the accessing
// of the elements from the stack
import java.util.*;
import java.io.*;
public class StackDemo {
// Main Method
public static void main(String args[])
{
// Creating an empty Stack
Stack<String> stack = new Stack<String>();
// Use push() to add elements into the Stack
stack.push("Welcome");
stack.push("To");
stack.push("Geeks");
stack.push("For");
stack.push("Geeks");
// Displaying the Stack
System.out.println("Initial Stack: " + stack);
// Fetching the element at the head of the Stack
System.out.println("The element at the top of the"
+ " stack is: " + stack.peek());
// Displaying the Stack after the Operation
System.out.println("Final Stack: " + stack);
}
}
Salida
1
2
3
Initial Stack: [Welcome, To, Geeks, For, Geeks]
The element at the top of the stack is: Geeks
Final Stack: [Welcome, To, Geeks, For, Geeks]
Eliminar elementos
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// Java program to demonstrate the removing
// of the elements from the stack
import java.util.*;
import java.io.*;
public class StackDemo {
public static void main(String args[])
{
// Creating an empty Stack
Stack<Integer> stack = new Stack<Integer>();
// Use add() method to add elements
stack.push(10);
stack.push(15);
stack.push(30);
stack.push(20);
stack.push(5);
// Displaying the Stack
System.out.println("Initial Stack: " + stack);
// Removing elements using pop() method
System.out.println("Popped element: "
+ stack.pop());
System.out.println("Popped element: "
+ stack.pop());
// Displaying the Stack after pop operation
System.out.println("Stack after pop operation "
+ stack);
}
}
Salida
1
2
3
4
Initial Stack: [10, 15, 30, 20, 5]
Popped element: 5
Popped element: 20
Stack after pop operation [10, 15, 30]
Ejercicios
Realiza los siguientes ejercicios:
-
Paréntesis. (M)
Pista
- Cuando encuentres un símbolo de apertura, añádelo a la pila
- Cuando sea de cierre, saca uno de la pila y comprueba si es el correspondiente. En caso contrario está mal
-
Pista
- ve apilando los operandos
- Cuando encuentres un operador, saca dos operandos y aplícale el operador
Adaptado del siguiente material