Autor Tema: Java definición polimorfismo y ArrayList que contiene distintos tipos CU00678B  (Leído 2721 veces)

camoay

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 44
    • Ver Perfil
Les dejo el ejercicio CU00678B del curso básico de fundamentos de programación con Java:

Clase TestInterfaceSet:

Código: [Seleccionar]
package com.aprenderaprogramar.java.iniciacion.clase78;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
// ó import java.util.*;

public class TestInterfaceSet {
public static void main(String[] args) {

ArrayList<Set> miSet = new ArrayList<Set>();// creo el arrayList
// creo el HashSet y lo inicializo con 3 objetos String
HashSet<String> miHashSet = new HashSet<String>();
  miHashSet.add("sol");miHashSet.add("luna");miHashSet.add("saturno");
// creo el TreeSet y lo inicializo con 2 objetos enteros
TreeSet<Integer> miTreeSet = new TreeSet<Integer>();
miTreeSet.add(2);miTreeSet.add(8);miTreeSet.add(5);
// inicializo el arrayList con los objetos HashSet y TreeSet
miSet.add(miHashSet);miSet.add(miTreeSet);
// Defino iteradores y variables temporales(para el iterador) para cada unos de los conjuntos 
Iterator<Set> itMiSet = miSet.iterator();
//Set tmpElement;
Iterator<String> itMiHashSet = miHashSet.iterator();
String tmpString;
Iterator<Integer> itMiTreeSet = miTreeSet.descendingIterator();
Integer tmpInteger;
// inicio un bucle con iterador para visualizar cada objeto del ArrayList
while(itMiSet.hasNext()){
//tmpElement = itMiSet.next();
// inicio un bucle con iterador para visualizar cada objeto del HashSet
while(itMiHashSet.hasNext()){
// el método iterador() implementado en esta clase no garantiza el orden y de hecho lo
// ordena ascendentemente por el valor de cada string, en lugar de por el orden/posición
// dentro del HashSetlo mismo ocurre con el método toString() que da el mismo resultado:
// "luna","saturno","sol",
tmpString = itMiHashSet.next();
System.out.print("\""+tmpString+"\",");
}// end HashSet while
// inicio un bucle con iterador para visualizar cada objeto del TreeSet
while(itMiTreeSet.hasNext()){
// en esta clase TreeSet deja bien claro que existen 2 tipos de iteradores, uno ascendente
// y otro descendente (según el valor de los elementos que lo componen), por lo que se
// puede ordenar en orden descendente como pide el enunciado.
tmpInteger = itMiTreeSet.next();
System.out.print(tmpInteger+",");
}// end TreeSet while
}// end outer while
}// end main method
}// end class

Muchas gracias por sus comentarios.
« Última modificación: 01 de Octubre 2016, 12:25 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola camoay, se nota que has trabajado el código y le has dedicado tiempo, pero hay cosas que habría que mejorar.

La primera cuestión es que al declarar HashSet<String> miHashSet = new HashSet<String>(); estás declarando tipo estático y dinámico HashSet

Lo mejor para trabajar realmente con polimorfismo es declarar el tipo estático el de la interface y el dinámico el de la clase, en este caso sería Set<String> miHashSet = new HashSet<String>();

El otro problema es que tu código es de propósito específico, es decir, no resuelve el problema general de tener varios Set dentro de una colección y poder mostrar sus elementos, sino solo el caso particular del ejercicio.

Normalmente debemos programar buscando generalizar, no casos específicos.

Fíjate en la solución de este ejercicio y compárala con tu solución para ver estas cuestiones: https://www.aprenderaprogramar.com/foros/index.php?topic=2384.0

Saludos

 

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".