Autor Tema: Ejercicio resuelto polimorfismo en java CU00678B# - Set, HashSet y TreeSet  (Leído 5730 veces)

fedegaray

  • Principiante
  • **
  • Mensajes: 81
    • Ver Perfil
Citar
La interface Set de Java es implementada por las clases HashSet y TreeSet. Busca información sobre estas clases en la documentación del api Java. Crea un programa Java que haga lo siguiente:

a) Declarar un ArrayList de objetos de tipo Set.
b) Crear un objeto de tipo HashSet para contener Strings y haz que contenga las cadenas “sol”, “luna”, “saturno”.
c) Crear un objeto TreeSet para contener Integers y haz que contenga los números 2, 8, 5.
d) Añade los objetos HashSet y TreeSet como elementos del ArrayList.
e) Usa iteradores para recorrer los elementos del ArrayList y recorrer el contenido de cada uno de los elementos y mostrar este contenido por pantalla. Por pantalla deberás obtener “sol”, “luna”, “saturno”, 8, 5, 2.

Aquí va mi resolución del ejercicio. Que tengan todos un buen día!

Código: [Seleccionar]
import java.util.*;

public class TrabajarConSet {
   
    public static void main (String [] args) {
        System.out.println ("\f");
        ArrayList<Set> miListaDeSets = new ArrayList<Set>();
        HashSet<String> miListaDeStrings = new HashSet<String>();
        miListaDeStrings.add("sol");
        miListaDeStrings.add("luna");
        miListaDeStrings.add("saturno");
        TreeSet<Integer> miListaDeIntegers = new TreeSet<Integer>();
        miListaDeIntegers.add(2);
        miListaDeIntegers.add(8);
        miListaDeIntegers.add(5);
        miListaDeSets.add(miListaDeStrings);
        miListaDeSets.add(miListaDeIntegers);
        Iterator<Set> it = miListaDeSets.iterator();
        while (it.hasNext()) {
            System.out.println (it.next());
        }
    }
}
« Última modificación: 20 de Abril 2015, 10:33 por Ogramar »

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 393
    • Ver Perfil
Hola fedegaray, tu código está bien.

En el bucle

      while (it.hasNext()) {
            System.out.println (it.next());
        }

Lo que haces es mostrar los objetos completos por pantalla, en este caso es Java quien se encarga de mostrar el objeto. Pero no estás recorriendo cada uno de los elementos que contienen los objetos. A modo de ejercicio, sería interesante que probaras a recorrer cada uno de los elementos y mostrar cada elemento por separado.

Esto sería un ejemplo

Código: [Seleccionar]
import java.util.HashSet;
import java.util.TreeSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.Iterator;

public class TestPolimorfismo
{
    public static void main(String[]args){
        List<Set>miLista=new ArrayList<Set>();
        Set<String>miConjuntoDeStrings=new HashSet<String>();
        Set<Integer>miConjuntoDeIntegers=new TreeSet<Integer>();

        miConjuntoDeStrings.add("luna");
        miConjuntoDeStrings.add("sol");
        miConjuntoDeStrings.add("saturno");

        miConjuntoDeIntegers.add(2);
        miConjuntoDeIntegers.add(8);
        miConjuntoDeIntegers.add(5);

        miLista.add(miConjuntoDeStrings);
        miLista.add(miConjuntoDeIntegers);

        Iterator it1 = miLista.iterator();
       
        while (it1.hasNext()) {
            Set tmp = (Set)it1.next();
            Iterator it2=tmp.iterator();
            if(tmp instanceof HashSet) {
                System.out.println("Elementos del HashSet.");
            } else {
                System.out.println("Elementos del TreeSet.");
            }
            int i = 0;                               
            while(it2.hasNext()){
                System.out.println("i: " + (i++) + " - " + it2.next());
            }
        }
    }
}

Otra opción, para evitar tener que hacer el casting Set tmp = (Set)it1.next(); sería declarar el tipo que devuelve el iterator así:

Código: [Seleccionar]
        Iterator<Set> it1 = miLista.iterator();
       
        while (it1.hasNext()) {
            Set tmp = it1.next();
            Iterator it2=tmp.iterator();
            int i = 0;                               
            while(it2.hasNext()){
                System.out.println("i: " + (i++) + " - " + it2.next());
            }
        }

Declarándolo así el iterador es sobre Set, mientras que de la otra manera es sobre Object y de ahí que haga falta el casting.
« Última modificación: 08 de Diciembre 2020, 12:21 por Alex Rodríguez »

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".