✅✅ ✅ ✅ ✅ Todos mis cursos gratuitos 👉 www.pildorasinformaticas.es ✅✅ ✅ ✅ ✅ 🚀 ¿Quieres ejercicios? ¿Quieres más temario? 👉 www.pildorasinformaticas.es/course/java-tutorizado/🚀 🚀 ¿Quieres que te resuelva las dudas de Java? 👉 www.pildorasinformaticas.es/course/java-tutorizado/ 🚀 💥💥💥 Siempre seguiré subiendo cursos gratuitos por aquí. Gracias a todos por seguirme. 💥💥💥
Profesor muchas gracias, gracias por tomarse el tiempo de transmitir su conocimiento, gracias por hacer los videos tan claros y tan amenos, es de mucha ayuda para los programadores como yo que somos un poco más cerrado para la programación
Muy bueno el video, permiteme una correccion: Cuando dices que es complicado extraer informacion de un objeto cuando usas Iterator, no es cierto, puedes crear un objeto del tipo que estas Iterando y volcar la informacion mediante Next(), es decir, en concreto, al ejemplo que pusiste puedes (dentro del bucle while) poner: Cliente c = it.next(); System.out.println("Nombre: " + c.getnombre + "Cuenta: " + c.getCuenta); Y asi tendrias un obleto de tipo Cliente instanciado en c, y ya llamar a los metodos que tienes en la clase Cliente, llamando mediante getters a los campos de clase Me ha encantado la parte en la que explicas como funciona la instruccion Next(), muy visual, lo entendi mucho mejor! Muchisimas gracias por tu tiempo! :)
gran aporte , pero tengo una duda , pasa algo si cada ratoa ndo creando objetos ? ejemplo , estoy haciendo un ejercicio de base de datos y creo objetos de tipo usuario en diferentes metodos , en el metodo actualizar se crearian 3 objetos de este tipo 1 - el objeto actualizarUsuario , 2 - los objetos que se guardan en una lista , 3 - el objeto del iterator (si se que es tonto , pero la cosa es que se crean objetos de diferentes metodos constructores , mas que nada para no almacenar atributos que no se usan , como por ejemplo , no vas a actualizar la fecha de nacimiento o fecha de registro )
@@elmarisco143 Pasar no pasa nada si se crean muchos objetos, al final es solo espacio en la memoria que hoy en día hay mucho, en realidad en este caso, al no conocer el código de tu ejemplo es medio complicado aconsejar, pero algo que podrías hacer para ahorrar espacio, es crearte un método para actualizar información de un usuario, entonces cada vez que lo invocas, pasas la información que se quiere actualizar (un método para cada información, por ej, uno para nombre, otro para dni...) y dentro del método, haces que el mismo busque en la colección al usuario especifico (cada usuario debe tener un código identificativo único) y cuando llega a ese usuario, que le cambie el valor de esa variable. Ej public void Cambia_nombre(String nombre, int id) { while(it.hasNext()) { Persona p = it.next(); if(p.getID == id){ //si el id es el de la persona que se esta buscando p.nombre = nombre;//cambiale la variable nombre a esa persona } } } No te preocupes porque con este código: while(it.hasNext()) { Objeto o = it.next(); trabajas con el objeto.... } No se crean todos los objetos de la colección, se crea un solo objeto del tipo que sea tu colección y se va sobrescribiendo por cada iteración, por lo que al final solo se estaría guardando lugar para un objeto.
Vine a escribir justo lo mismo jaja. Yo ya sabia como funcionaban estos metodos por el uno de los modulos del ciclo donde lo usabamos mucho para recorrer un ResultSet de una query de mysql pero bueno es raro que a Juan se le pase algo pero nadie es perfecto y sus cursos son de 10. Saludos
Los videos son geniales, varios compas me decian que veian tus videos y por tiempo nunca lo hice. Pero la verdad no dejas pasar nada, enseñas el trasfondo de las cosas. Excelentes videos. Y perfecto que elimines a Julio Iglesias..jaja
Muchas gracias por compartir su conocimiento profesor, voy por el vídeo 45 y su curso me esta siendo de gran ayuda para poder aprobar la asignatura de POO en la universidad. También estoy siguiendo los de html y css, excelentes los tres. MUCHAS GRACIAS!!!
Me estoy preparando el OCP y aparte el módulo de programación. Entre el libro de Katy Sierra (Inglés) y mi profesor (Alemán) a veces se me hace muy difícil algo que con tus tutos me está resultando facilísimo de entender! Aparte de que tocas todos los temas del OCP hasta ahora. Gracias y buen trabajo!
Saludos. Muy buen vídeo y muy bien explicado , además con mucho humor , me he reído sanamente con la comparación de next() con el toro pasado... gracias a eso tengo grabado a fuego en la mente lo que hace el next(). Gracias por tus videos , trabajo y buen humor.
Hola Juan, después de lo "habría que darle vueltas"... creo que es bastante sencillo, al menos he probado y parece funcionar: Iterator it2 = clientes.iterator(); while(it2.hasNext()){ Cliente cli = it2.next(); System.out.println("Nombre: "+cli.getNombre()+" con cuenta: "+cli.getNcuenta()+" saldo: "+cli.getSaldo()); }
Un apunte para ver los datos. del cliente se puede hacer generando un método toString() en la clase cliente y luego que el iterado lo llame while( it.hastNext() ){ System.out.println( it.Next().toString() ); }
Otra forma de recorrer para eliminar una objeto en el iterador: while(it.hasNext()) {
Cliente cliente1 = it.next();
if(cliente1.getNombre().equals("sara")) { it.remove(); } } Fijense que "cliente1" va representando el objeto porque vaya pasando en cada iteracion del bucle. En la primera corrida sera el primer objeto, en la segunda corrida sera el segundo obj y asi sucesivamente. cliente1 basicamente es un apuntador el cual puede utilizar los metodos del objeto al que apunte , en esste caso, el objeto Cliente
Me preguntaba como usar el iterador cuando el if tiene 2 condiciones sin que la segunda condición salte al siguiente elemento. Me acabas de responder. Gracias.
Hola Juan! Como siempre felicitarte por tus cursos, eres de los mejores profesores (si no el mejor) que he tenido en toda mi carrera (y no exagero). Tengo una duda, para la problematica en el minuto 13, porque no asociar el elemento "next()" a un objeto de tipo Cliente temporal, y obtener todos los datos de este objeto temporal? (Funciona, pero no se si puede haber problemas y por eso lo evitas). Iterator it; it = clientesBanco.iterator(); while(it.hasNext()) { Cliente cliente = it.next(); System.out.println(cliente.getNombre() + " " + cliente.getNumero_cuenta() + " " + cliente.getSaldo()); }
Muchas gracias por el comentario. Me alegro de que te gusten tanto los vídeos. Respecto al código que adjuntas, si funciona...perfecto. Ya sabéis que siempre hay varios caminos para llegar a Roma y yo no tomo siempre el más corto. Un saludo!!
Iterator it = clientesBanco.iterator(); while(it.hasNext()) { System.out.println(it.next()); } más corto si se sobreescribe el método toString en la clase Cliente public String toString() { return "Nombre: " + nombre + " Numero de cuenta: " + numeroCuenta + " Saldo: " + saldo + " € "; }
gracias por explicar todo lo que va pasando con el código, generalmente en estos videos te dicen "escribe esto" sin decir que significa lo que estas haciendo, o te dicen "pero eso lo veremos después" y que va! si no somos tontos, pueden explicar de una vez y ya. Tu marcas la diferencia. gracias.
Profesor mis respeto, practicamente aprendi (lo poco que se, porque aun soy un crio) java con Deitel y con sus videos. Usted en el minuto 12:02 (por ahi) hablo del problema de querer acceder a otro campo del objeto que se recorre, y que al tener que llamar otra vez al metodo next() : iterator, accedemos a una posicion mayor a la actual. Pero que tal si guardamos esa referencia del objeto Iterador en una variable temporal dentro del while. para asi acceder a la misma referencia en cada vuelta del ciclo. No se si me explico. Iterator iterator while(iterator.hastNext()) Empleado n = iterator.next() n.getName n.getApellidos n.etc() /*Asi tengo una referencia al mismo objeto*/ No se si es mejor, tomando en cuenta las interfaces publicas para operar que nos ofrece un Objeto Iterator y a través de su herencia.
Creo que sería muy importante que notificaras que desde Java 8.0 si que es posible modificar un objeto de tipo collection mientras se recorre en un bucle for each, por lo que he estado leyendo por los comentarios. Puede dar lugar a mucha confusión y lo veo importante...
buen aporte gracias. Sin embargo acabo de probar y aun no puedo modifcar la coleccion mientras la recorro...quizas tenga que declarar algo mas....ni idea por ahora
Hice una pequeña optimización en el código cuando usa el Iterator para eliminar a "Julio Iglesias" jeje Iterator it = clientesBanco.iterator(); while(it.hasNext()) { String nombre_cliente = it.next().getNombre(); if(nombre_cliente == "Julio Iglesias") { it.remove(); break; // optimizando el codigo :) } System.out.println("Sali al completar"); } Coloque un break para que salga del while cuando encuentre el elemento a remover. Saludos.
Si quiero mostrar la información general de un objeto al usar el iterator, simplemente podría llamar al toString y listo... el problema radica en si se debe utilizar algún método que me devuelva el objeto para operar con el mismo, en ese caso veo más factible el for. En cualquier caso, me parece bastante interesante. :) Gracias.
Hola Juan. ¡¡ Enorme trabajo!! estas haciendo con este y otros cursos.Gracias por tiempo y dedicación. Tengo una duda, en el ejercico del video, si pongo dos bucles while uno seguido del otro solo me muestra el primero. Para que me muestre el segundo tengo que iniciar denuevo la variable Iterator. it=clientesBanco.iterator(); Cual seria la forma correcta para hacerlo?
para que te salga nombre y cuenta lo hice asi , jeje un aporte muy basico pero bueno Iterator it=clienteBanco.iterator(); Iterator itc=clienteBanco.iterator();
Intente crear 2 iteradores uno para listar por nombre y el otro para borrar por nombre y los declare con distinto nombre it1 ,it2. y no funciono. que puedo hacer para tener estas 2 operacioens en el mismo array??
Los árboles son diferentes a pesar de que tienen cierta relación con las colecciones. Sí, los árboles se utilizan. Todo el código que tiene Java se utiliza, algunas cosas más otras menos, pero todo se utiliza. Un saludo!!
tan sencillo lo explicas muy bien gracias saludos desde México pero tengo una duda como le doy por así decirlo un nombre a las columnas si estoy usando un Arraylist como una tabla no se si me explicó de antemano gracias
Hola ! Creo que te explicas. No podrás hacer eso en un ArrayList. Tampoco lo necesitarás. En caso de necesitar tratar los datos almacenados como si fuera una BBDD, entonces utilizaremos JDBC (explicado más adelante en el curso). Un saludo!!
pildorasinformaticas profesor y abusando de su confianza despejeme de esta duda como le hago para que el arraylist me salte a otra linea por ejemplo quiero almacenar datos de un cliente 1 cliente 25.255.255 32 informe 2. x 24553353 gerente asi sucesivamente ya que el Arraylist que tengo lo que hace es lo mismo pero haciendo esto junto 1 cliente 25.255.255 32 informe2.x24553353 gerente asi susecivamente todo junto por favor de antemano Gracias
No se si entiendo del todo la pregunta. ¿Cómo sabes que la información está en la misma línea? Imagino que será porque lo ves en consola... En ese caso utiliza println en vez de print. Un saludo!!
Gracias profe si de echo es en la consola pero mire ya lo hice : public void pedirCita(){ System.out.println("Asunto: "); asunto = teclado.nextLine(); System.out.println("Hora: "); hora = teclado.nextLine(); System.out.println("Id: "); id = teclado.nextLine(); Cita.add(id); Cita.add(asunto); Cita.add(hora); } public void VisualizarCita(){ System.out.println("--CITAS ACTUALES--"); for(int i = 0;i
+pildorasinformaticas Tengo la misma duda Ingeniero Juan, cual es la razón por la que en el minuto 7:58 no se coloca la palabra reservada implementes Iterator, delante de la clase si Iterator es una interface? De antemano gracias por su atención Ingeniero, que tenga usted un excelente día!
Soy el único que la parte que mas le gusta de los videos es la de cuando da teoría? xD Por cierto, me compadezco enormemente de la gente que programaba antes de la versión 5 de java, no tenian ni los for each ni la programación generica, se tenían que hacer todo ellos solitos y con un codigo bastante poco entendible...
Esta es una manera de mostrar todos los datos con un iterador: Iterator it=clientes_del_banco.iterator(); while (it.hasNext()) { Cliente cliente=it.next(); System.out.println("nombre: " + cliente.getNombre() + " | nro_cuenta: " + cliente.getNumero_de_cuenta()+" | saldo: "+ cliente.getSaldo()); System.out.println("-----------------------------------------------------------------");
disculpe me parece muy bueno su curso ya que la forma de explicar es muy clara, queria preguntar este curso me sirve para finalizar tomar el examen de certificacion de oracle?
+Luis franco marin Hola !! Gracias por el comentario. El afrontar el examen de certificación con éxito depende de cada uno, pero en este curso se verán todos los aspectos del Oracle Certified Professional, Java SE 7 Programmer. Un saludo
Profesor de pildoras informaticas, muy clarisima la explicacion, solo una duda, en la linea 18 a mi me funciona solamente si pongo; HashSet clientesBanco=new HashSet(); (si pongo como vos primero Set me da error a no ser que falte otra libreria a parte de la hashSet de java.util, gracias sigo atentamente tu curso me esta ayudando mucho. te entendi mejor a vos que al profesor lastima que te vi despues ya que la materia de java en al univ. si lo veia antes no la recursaba, hoy tengo que hacer un gol de media cancha y de oro jaja, para recuperarme jaja. un abrazo desde Buenos Aires. y que sea el tercero como en España jaja
Estoy siguiendo el curso java en su respectivo órden y me resulta muy claro y didáctico. Una pregunta: Mi objetivo final es programar para Android. ¿Cual es su recomendación respecto a aprender Java previamente a interiorizarse en lo que es Mobile? Saludos y gracias!
+Dam Floresta Hola !! Gracias por el comentario. Mi recomendación si se quiere programar para Android es que primero se aprenda Java y después se realice un curso específico de Android. Yo comenzaré uno cuando esté a punto de terminar este de Java. Un saludo
Si quiero meter el for earh o iterador en un método a parte, como tendría que hacer? Es algo que estoy buscando por todas partes y no soy capaz de avanzar. Si hago todo en el main funciona ya que primero declaramos el ArrayList y a estar todo en el main perfecto. Pero si yo creo un método mostrarListado() no me funciona el Iterator sin volver a poner algo así: ArrayList listaLibros = new ArrayList(); Y claro si hago eso, no me va a detectar los elementos que introduje antes, ya que esto es un nuevo ArrayList. No sé si me explico, pero en resumen es como se puede poner el iterador solo, en un método. Muchas gracias! Los vídeos son muy buenos.
Hola !! Declara el ArrayList como campo de clase fuera de cualquier método y luego trabaja con él desde cualquier método. Reconocerá los elementos introducidos en él desde cualquier método. Un saludo!!
Disculpe profesor, entiendo que en este tema de las colecciones hay muchas interfaces que heredan de otras interfaces pero siempre viene a mi mente la siguiente pregunta ¿dónde puedo encontrar la implementación de los métodos definidos en las interfaces? Por ejemplo el metodo next, hasnext y remove de la interfaz Iterator ¿en qué lugar están definidos? ¿Cuál es la clase que los define?
Hola !! No encontrarás en ningún sitio la definición de una interfaz. Si lo que te preguntas es cómo es posible que una interfaz funcione si no está implementada en ningún lugar de la API, esa pregunta deberías hacerla a alguien de Oracle para que te explique cómo han hecho esa "magia". Un saludo!!
Hola. Las interioridades del código de la API de Java, como lenguaje _open-source_ sí pueden consultarse dentro de la biblioteca que aparece en tus proyectos en Eclipse bajo la rúbrica "JRE System Library". Cuestión diferente es que el nivel técnico del código de muchas de estas clases en la biblioteca puede exceder la capacidad de muchos de nosotros para comprenderlo. Las interfaces, como bien sabes, no definen métodos, tan solo los declaran de manera abstracta. Para encontrar su *concreción* debes investigar las clases que implementan las interfaces. Encontrar estas implementaciones en el _framework_ de Colecciones de Java puede ser un trabajo más arduo y laberíntico de lo acostumbrado debido a la estrecha interconexión que hay entre las interfaces, clases abstractas y clases concretas de esta API y su abundante número. Si tienes curiosidad, aquí te dejo un fragmento del código de determinadas _inner classes_ embebidas en la clase predefinida *HashMap* de la API de Java que puedes encontrar interesantes para tu consulta: /* ------------------------------------------------------------ */ // iterators abstract class HashIterator { Node next; // next entry to return Node current; // current entry int expectedModCount; // for fast-fail int index; // current slot HashIterator() { expectedModCount = modCount; Node[] t = table; current = next = null; index = 0; if (t != null && size > 0) { // advance to first entry do {} while (index < t.length && (next = t[index++]) == null); } } public final boolean hasNext() { return next != null; } final Node nextNode() { Node[] t; Node e = next; if (modCount != expectedModCount) throw new ConcurrentModificationException(); if (e == null) throw new NoSuchElementException(); if ((next = (current = e).next) == null && (t = table) != null) { do {} while (index < t.length && (next = t[index++]) == null); } return e; } public final void remove() { Node p = current; if (p == null) throw new IllegalStateException(); if (modCount != expectedModCount) throw new ConcurrentModificationException(); current = null; removeNode(p.hash, p.key, null, false, false); expectedModCount = modCount; } } final class KeyIterator extends HashIterator implements Iterator { public final K next() { return nextNode().key; } } final class ValueIterator extends HashIterator implements Iterator { public final V next() { return nextNode().value; } } final class EntryIterator extends HashIterator implements Iterator { public final Map.Entry next() { return nextNode(); } }
Iterator es una Interfaz, no una clase. El método iterator() pertenece a la Interfaz Collection y devuelve un objeto de tipo Iterator. Por eso creamos una variable de tipo Iterator (llamada it) para almacenar el objeto Iterator que devuelve el método iterator() al aplicarlo sobre la colección clientesBanco. Si echas un vistazo en la API a estas interfaces y métodos que te menciono, lo entenderás mejor. Un saludo!!
Sí. Echa un vistazo a este enlace, puede que te aclare algo: www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=630:coleccion-de-objetos-de-tamano-variable-java-listas-pilas-colas-collection-list-set-queue-map-cu00664b&catid=68&Itemid=188 Un saludo!
Buenas Juan, muy buen video, una cosa, yo tengo Java 8.0, y si que me deja en un forEach borrar un elemento, no se si en la última versión de Java lo han agregado. Un saludo
para sacar la info directo del iterador se me ocurre, dame tu opinión realmente no lo probe: Iterator it = clientesBanco.iterator(); while(it.hasNext()) { // hasta aqui igual al tuyo cliente Auxiliar = it.next(); // AQUI ES LA NOVEDAD, esto me dejaria hacer lo siguiente system.out.println(Auxiliar.getNombre()); system.out.println(Auxuliar.getN_cuenta()); // asi uso un solo next() y puedo imprimir lo que uiera }
Y si metes lo que quieres borrar por scanner? A mi esto de ma la excepcion de concurrent Modification Exception private ArrayList coleccion = new ArrayList(); Iterator iter = coleccion.iterator();public String borrarArticulo() { String codigo = null;
System.out.println("Por favor introduzca el codigo del articulo"); codigo = teclado.nextLine(); //ValidarCodigo(codigo);
while (iter.hasNext()) { String variable = iter.next().getCodigo(); if (variable.equals(codigo)) { iter.remove(); System.out.println("Producto eliminado"); } }
Para imprimir todos los datos del cliente con el Iterador bastaría con crear una instancia del objeto Cliente, en vez de crear un objeto de tipo string y luego imprimir todo en consola con los métodos getters. así: while (iterator.hasNext()){ ClienteI cliente=iterator.next(); System.out.println("Nombre cliente: "+cliente.getNombre()+". Número de cuenta: "+cliente.getNumero_cuenta()+". Saldo disponible: "+cliente.getSaldo()+"€"); }
✅✅ ✅ ✅ ✅ Todos mis cursos gratuitos 👉 www.pildorasinformaticas.es ✅✅ ✅ ✅ ✅
🚀 ¿Quieres ejercicios? ¿Quieres más temario? 👉 www.pildorasinformaticas.es/course/java-tutorizado/🚀
🚀 ¿Quieres que te resuelva las dudas de Java? 👉 www.pildorasinformaticas.es/course/java-tutorizado/ 🚀
💥💥💥 Siempre seguiré subiendo cursos gratuitos por aquí. Gracias a todos por seguirme. 💥💥💥
He estado siguiendo tu curso y me has salvado de muchas situaciones en la universidad. Eres de los mejores
Gracias !! Me alegro de que el curso sea de utilidad. Un saludo!
Opino lo mismo! lastima que no tengo primas para presentarte una :)
@@wg3771eh?
Profesor muchas gracias, gracias por tomarse el tiempo de transmitir su conocimiento, gracias por hacer los videos tan claros y tan amenos, es de mucha ayuda para los programadores como yo que somos un poco más cerrado para la programación
Gracias a ti por seguir el curso. Un saludo!
Qué crack!!! me estas salvando la vida con tus curso. Muchas gracias!!!!!!
Muy bueno el video, permiteme una correccion:
Cuando dices que es complicado extraer informacion de un objeto cuando usas Iterator, no es cierto, puedes crear un objeto del tipo que estas Iterando y volcar la informacion mediante Next(), es decir, en concreto, al ejemplo que pusiste puedes (dentro del bucle while) poner:
Cliente c = it.next();
System.out.println("Nombre: " + c.getnombre + "Cuenta: " + c.getCuenta);
Y asi tendrias un obleto de tipo Cliente instanciado en c, y ya llamar a los metodos que tienes en la clase Cliente, llamando mediante getters a los campos de clase
Me ha encantado la parte en la que explicas como funciona la instruccion Next(), muy visual, lo entendi mucho mejor!
Muchisimas gracias por tu tiempo! :)
Buen apunte man.
gran aporte , pero tengo una duda , pasa algo si cada ratoa ndo creando objetos ? ejemplo , estoy haciendo un ejercicio de base de datos y creo objetos de tipo usuario en diferentes metodos , en el metodo actualizar se crearian 3 objetos de este tipo
1 - el objeto actualizarUsuario , 2 - los objetos que se guardan en una lista , 3 - el objeto del iterator
(si se que es tonto , pero la cosa es que se crean objetos de diferentes metodos constructores , mas que nada para no almacenar atributos que no se usan , como por ejemplo , no vas a actualizar la fecha de nacimiento o fecha de registro )
@@elmarisco143 Pasar no pasa nada si se crean muchos objetos, al final es solo espacio en la memoria que hoy en día hay mucho, en realidad en este caso, al no conocer el código de tu ejemplo es medio complicado aconsejar, pero algo que podrías hacer para ahorrar espacio, es crearte un método para actualizar información de un usuario, entonces cada vez que lo invocas, pasas la información que se quiere actualizar (un método para cada información, por ej, uno para nombre, otro para dni...) y dentro del método, haces que el mismo busque en la colección al usuario especifico (cada usuario debe tener un código identificativo único) y cuando llega a ese usuario, que le cambie el valor de esa variable. Ej
public void Cambia_nombre(String nombre, int id) {
while(it.hasNext()) {
Persona p = it.next();
if(p.getID == id){ //si el id es el de la persona que se esta buscando
p.nombre = nombre;//cambiale la variable nombre a esa persona
}
}
}
No te preocupes porque con este código:
while(it.hasNext()) {
Objeto o = it.next();
trabajas con el objeto....
}
No se crean todos los objetos de la colección, se crea un solo objeto del tipo que sea tu colección y se va sobrescribiendo por cada iteración, por lo que al final solo se estaría guardando lugar para un objeto.
Vine a escribir justo lo mismo jaja. Yo ya sabia como funcionaban estos metodos por el uno de los modulos del ciclo donde lo usabamos mucho para recorrer un ResultSet de una query de mysql pero bueno es raro que a Juan se le pase algo pero nadie es perfecto y sus cursos son de 10. Saludos
Excelente amigo...
Muchas gracias Juan. Un saludo
Como siempre profe usted un lujo ver sus clases.
Los videos son geniales, varios compas me decian que veian tus videos y por tiempo nunca lo hice. Pero la verdad no dejas pasar nada, enseñas el trasfondo de las cosas. Excelentes videos. Y perfecto que elimines a Julio Iglesias..jaja
Muchas gracias por compartir su conocimiento profesor, voy por el vídeo 45 y su curso me esta siendo de gran ayuda para poder aprobar la asignatura de POO en la universidad. También estoy siguiendo los de html y css, excelentes los tres. MUCHAS GRACIAS!!!
+Bernat Rivera Pues gracias a ti por el comentario y por seguir mis vídeos. Un saludo
Excelente curso, ha sido una gran aventura!
Un tutorial de excelencia, dio al clavo sin excepción. Es usted un grande
Me estoy preparando el OCP y aparte el módulo de programación. Entre el libro de Katy Sierra (Inglés) y mi profesor (Alemán) a veces se me hace muy difícil algo que con tus tutos me está resultando facilísimo de entender! Aparte de que tocas todos los temas del OCP hasta ahora. Gracias y buen trabajo!
Gracias por el comentario. Me alegro de que los vídeos te ayuden. Un saludo!!
Se que pregunto 5 años tarde pero ¿Que es OCP?
Otro video mas para el cerebro !!! vamosss
Que buen profesor, espero se este cuidando de este virus, muchas gracias !!!
Saludos.
Muy buen vídeo y muy bien explicado , además con mucho humor , me he reído sanamente con la comparación de next() con el toro pasado... gracias a eso tengo grabado a fuego en la mente lo que hace el next().
Gracias por tus videos , trabajo y buen humor.
+Sinno mbre :)) Un saludo
Ilustre, Excelentes Videos Felicitaciones por tan grande Conocimiento
NetBeans IDE 8.0.2 CON JDK 1.8 NO DA EL ERROR("ConcurrentModificationException") DEL MINUTO 18:03; POR EL CONTRARIO, LA OPERACIÓN REMOVE FUE EXITOSA!
Hm, a mi si me lo da y estoy usando JDK 1.8 también.
En java 8 al parecer se cambio eso de la excepción, el curso que hizo el profe es con java 6 o 7, ese seria el porque
Me encanta como explicas, muy claro!
Gracias por compartir tu conocimiento un saludo
Gracias por tus sabios conocimientos. En vacaciones ojalá pueda comprar tus cursos premium. Estoy haciendo todo lo posible por ahorrrar hasta Enero
Completamente de acuerdo... en lo de eliminar a Julio Iglesias en vez de a Penélope Cruz
Muchas Graciaaas! que Dios lo bendiga
Eres el rock explicando. ¡Suscrito! muchas gracias.
Otro gran videotutorial !!!
Hola Juan, después de lo "habría que darle vueltas"... creo que es bastante sencillo, al menos he probado y parece funcionar:
Iterator it2 = clientes.iterator();
while(it2.hasNext()){
Cliente cli = it2.next();
System.out.println("Nombre: "+cli.getNombre()+" con cuenta: "+cli.getNcuenta()+" saldo: "+cli.getSaldo());
}
excelente video, eres muy bueno explicando, cosa que algunos profesores no lo son, sigue asi por favor
Gracias por el comentario. Un saludo!!
Un apunte para ver los datos. del cliente se puede hacer generando un método toString() en la clase cliente y luego que el iterado lo llame
while( it.hastNext() ){
System.out.println( it.Next().toString() );
}
Genio de la vida
Otra forma de recorrer para eliminar una objeto en el iterador:
while(it.hasNext()) {
Cliente cliente1 = it.next();
if(cliente1.getNombre().equals("sara")) {
it.remove();
}
}
Fijense que "cliente1" va representando el objeto porque vaya pasando en cada iteracion del bucle.
En la primera corrida sera el primer objeto, en la segunda corrida sera el segundo obj y asi sucesivamente.
cliente1 basicamente es un apuntador el cual puede utilizar los metodos del objeto al que apunte , en esste caso, el objeto Cliente
Me preguntaba como usar el iterador cuando el if tiene 2 condiciones sin que la segunda condición salte al siguiente elemento. Me acabas de responder. Gracias.
y felicitaciones, excelente curso, te quedo barbaro!!
Hola Juan! Como siempre felicitarte por tus cursos, eres de los mejores profesores (si no el mejor) que he tenido en toda mi carrera (y no exagero).
Tengo una duda, para la problematica en el minuto 13, porque no asociar el elemento "next()" a un objeto de tipo Cliente temporal, y obtener todos los datos de este objeto temporal? (Funciona, pero no se si puede haber problemas y por eso lo evitas).
Iterator it;
it = clientesBanco.iterator();
while(it.hasNext()) {
Cliente cliente = it.next();
System.out.println(cliente.getNombre() + " " + cliente.getNumero_cuenta() + " " + cliente.getSaldo());
}
Muchas gracias por el comentario. Me alegro de que te gusten tanto los vídeos. Respecto al código que adjuntas, si funciona...perfecto. Ya sabéis que siempre hay varios caminos para llegar a Roma y yo no tomo siempre el más corto. Un saludo!!
sin saberlo hice lo mismo que vos Ruben y empece a buscar para ver si ya lo habian subido y me encuentro con tu codigo jajaja. saludos
Iterator it = clientesBanco.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
más corto si se sobreescribe el método toString en la clase Cliente
public String toString() {
return "Nombre: " + nombre + "
Numero de cuenta: " + numeroCuenta + "
Saldo: " + saldo + " €
";
}
Completamente de acuerdo, estoy estudiando a distancia fp dam y lo entiendo mejor cómo lo explica Juan que cómo se explica en los apuntes que tenemos.
❤❤❤❤ gracias
gracias por explicar todo lo que va pasando con el código, generalmente en estos videos te dicen "escribe esto" sin decir que significa lo que estas haciendo, o te dicen "pero eso lo veremos después" y que va! si no somos tontos, pueden explicar de una vez y ya. Tu marcas la diferencia. gracias.
Profesor mis respeto, practicamente aprendi (lo poco que se, porque aun soy un crio) java con Deitel y con sus videos. Usted en el minuto 12:02 (por ahi) hablo del problema de querer acceder a otro campo del objeto que se recorre, y que al tener que llamar otra vez al metodo next() : iterator, accedemos a una posicion mayor a la actual. Pero que tal si guardamos esa referencia del objeto Iterador en una variable temporal dentro del while. para asi acceder a la misma referencia en cada vuelta del ciclo. No se si me explico.
Iterator iterator
while(iterator.hastNext())
Empleado n = iterator.next()
n.getName
n.getApellidos
n.etc()
/*Asi tengo una referencia al mismo objeto*/
No se si es mejor, tomando en cuenta las interfaces publicas para operar que nos ofrece un Objeto Iterator y a través de su herencia.
muy buenos tus videos
gracias por todo esto
Creo que sería muy importante que notificaras que desde Java 8.0 si que es posible modificar un objeto de tipo collection mientras se recorre en un bucle for each, por lo que he estado leyendo por los comentarios.
Puede dar lugar a mucha confusión y lo veo importante...
buen aporte gracias. Sin embargo acabo de probar y aun no puedo modifcar la coleccion mientras la recorro...quizas tenga que declarar algo mas....ni idea por ahora
@@robotvivo5158 Si en Cliente has sobrrescrito hashCode y equals() no debería dar problemas el que recorras a la vez que borras
Hice una pequeña optimización en el código cuando usa el Iterator para eliminar a "Julio Iglesias" jeje
Iterator it = clientesBanco.iterator();
while(it.hasNext()) {
String nombre_cliente = it.next().getNombre();
if(nombre_cliente == "Julio Iglesias") {
it.remove();
break; // optimizando el codigo :)
}
System.out.println("Sali al completar");
}
Coloque un break para que salga del while cuando encuentre el elemento a remover.
Saludos.
En el instituto en el que estudio pasan tus videos!!
Gracias!!!
Si quiero mostrar la información general de un objeto al usar el iterator, simplemente podría llamar al toString y listo... el problema radica en si se debe utilizar algún método que me devuelva el objeto para operar con el mismo, en ese caso veo más factible el for. En cualquier caso, me parece bastante interesante. :) Gracias.
Hola Juan. ¡¡ Enorme trabajo!! estas haciendo con este y otros cursos.Gracias por tiempo y dedicación.
Tengo una duda, en el ejercico del video, si pongo dos bucles while uno seguido del otro solo me muestra el primero.
Para que me muestre el segundo tengo que iniciar denuevo la variable Iterator.
it=clientesBanco.iterator();
Cual seria la forma correcta para hacerlo?
para que te salga nombre y cuenta lo hice asi , jeje un aporte muy basico pero bueno
Iterator it=clienteBanco.iterator();
Iterator itc=clienteBanco.iterator();
while (it.hasNext()) {
String nombrecliente=it.next().getNombre();
String cuentacliente=itc.next().getN_cuenta();
System.out.print(nombrecliente);
System.out.println(" "+cuentacliente);
}
Intente crear 2 iteradores uno para listar por nombre y el otro para borrar por nombre y los declare con distinto nombre it1 ,it2. y no funciono. que puedo hacer para tener estas 2 operacioens en el mismo array??
Profe muy bueno el curso, quería preguntar si los arboles también hacen parte de este concepto y si son muy utilizadoso no?
Los árboles son diferentes a pesar de que tienen cierta relación con las colecciones. Sí, los árboles se utilizan. Todo el código que tiene Java se utiliza, algunas cosas más otras menos, pero todo se utiliza. Un saludo!!
tan sencillo lo explicas muy bien gracias saludos desde México pero tengo una duda como le doy por así decirlo un nombre a las columnas si estoy usando un Arraylist
como una tabla no se si me explicó de antemano gracias
Hola ! Creo que te explicas. No podrás hacer eso en un ArrayList. Tampoco lo necesitarás. En caso de necesitar tratar los datos almacenados como si fuera una BBDD, entonces utilizaremos JDBC (explicado más adelante en el curso). Un saludo!!
pildorasinformaticas profesor y abusando de su confianza despejeme de esta duda como le hago para que el arraylist me salte a otra linea por ejemplo quiero almacenar datos de un cliente
1 cliente 25.255.255 32 informe
2. x 24553353 gerente
asi sucesivamente ya que el Arraylist que tengo lo que hace es lo mismo pero haciendo esto junto
1 cliente 25.255.255 32 informe2.x24553353 gerente
asi susecivamente todo junto por favor de antemano Gracias
No se si entiendo del todo la pregunta. ¿Cómo sabes que la información está en la misma línea? Imagino que será porque lo ves en consola... En ese caso utiliza println en vez de print.
Un saludo!!
Gracias profe si de echo es en la consola pero mire ya lo hice :
public void pedirCita(){
System.out.println("Asunto: ");
asunto = teclado.nextLine();
System.out.println("Hora: ");
hora = teclado.nextLine();
System.out.println("Id: ");
id = teclado.nextLine();
Cita.add(id);
Cita.add(asunto);
Cita.add(hora);
}
public void VisualizarCita(){
System.out.println("--CITAS ACTUALES--");
for(int i = 0;i
+pildorasinformaticas Tengo la misma duda Ingeniero Juan, cual es la razón por la que en el minuto 7:58 no se coloca la palabra reservada implementes Iterator, delante de la clase si Iterator es una interface? De antemano gracias por su atención Ingeniero, que tenga usted un excelente día!
Soy el único que la parte que mas le gusta de los videos es la de cuando da teoría? xD
Por cierto, me compadezco enormemente de la gente que programaba antes de la versión 5 de java, no tenian ni los for each ni la programación generica, se tenían que hacer todo ellos solitos y con un codigo bastante poco entendible...
Excelente tus videos!
Tenes sobre Test Junit Case?
Esta es una manera de mostrar todos los datos con un iterador:
Iterator it=clientes_del_banco.iterator();
while (it.hasNext()) {
Cliente cliente=it.next();
System.out.println("nombre: " + cliente.getNombre() + " | nro_cuenta: " + cliente.getNumero_de_cuenta()+" | saldo: "+ cliente.getSaldo());
System.out.println("-----------------------------------------------------------------");
}
disculpe me parece muy bueno su curso ya que la forma de explicar es muy clara, queria preguntar este curso me sirve para finalizar tomar el examen de certificacion de oracle?
+Luis franco marin Hola !! Gracias por el comentario. El afrontar el examen de certificación con éxito depende de cada uno, pero en este curso se verán todos los aspectos del Oracle Certified Professional, Java SE 7 Programmer.
Un saludo
Profesor de pildoras informaticas, muy clarisima la explicacion, solo una duda, en la linea 18 a mi me funciona solamente si pongo;
HashSet clientesBanco=new HashSet(); (si pongo como vos primero Set me da error a no ser que falte otra libreria a parte de la hashSet de java.util, gracias sigo atentamente tu curso me esta ayudando mucho. te entendi mejor a vos que al profesor lastima que te vi despues ya que la materia de java en al univ. si lo veia antes no la recursaba, hoy tengo que hacer un gol de media cancha y de oro jaja, para recuperarme jaja. un abrazo desde Buenos Aires. y que sea el tercero como en España jaja
Una pregunta juan, en este tema de iteradores, sabes la diferencia entre un iterador y un bucle for sencillo? capaz sea por bucles anidados ??
Estoy siguiendo el curso java en su respectivo órden y me resulta muy claro y didáctico. Una pregunta: Mi objetivo final es programar para Android. ¿Cual es su recomendación respecto a aprender Java previamente a interiorizarse en lo que es Mobile? Saludos y gracias!
+Dam Floresta Hola !! Gracias por el comentario. Mi recomendación si se quiere programar para Android es que primero se aprenda Java y después se realice un curso específico de Android. Yo comenzaré uno cuando esté a punto de terminar este de Java. Un saludo
Si quiero meter el for earh o iterador en un método a parte, como tendría que hacer? Es algo que estoy buscando por todas partes y no soy capaz de avanzar. Si hago todo en el main funciona ya que primero declaramos el ArrayList y a estar todo en el main perfecto. Pero si yo creo un método mostrarListado() no me funciona el Iterator sin volver a poner algo así:
ArrayList listaLibros = new ArrayList();
Y claro si hago eso, no me va a detectar los elementos que introduje antes, ya que esto es un nuevo ArrayList. No sé si me explico, pero en resumen es como se puede poner el iterador solo, en un método.
Muchas gracias! Los vídeos son muy buenos.
Hola !! Declara el ArrayList como campo de clase fuera de cualquier método y luego trabaja con él desde cualquier método. Reconocerá los elementos introducidos en él desde cualquier método. Un saludo!!
Disculpe profesor, entiendo que en este tema de las colecciones hay muchas interfaces que heredan de otras interfaces pero siempre viene a mi mente la siguiente pregunta ¿dónde puedo encontrar la implementación de los métodos definidos en las interfaces? Por ejemplo el metodo next, hasnext y remove de la interfaz Iterator ¿en qué lugar están definidos? ¿Cuál es la clase que los define?
Hola !! No encontrarás en ningún sitio la definición de una interfaz. Si lo que te preguntas es cómo es posible que una interfaz funcione si no está implementada en ningún lugar de la API, esa pregunta deberías hacerla a alguien de Oracle para que te explique cómo han hecho esa "magia". Un saludo!!
Hola. Las interioridades del código de la API de Java, como lenguaje _open-source_ sí pueden consultarse dentro de la biblioteca que aparece en tus proyectos en Eclipse bajo la rúbrica "JRE System Library". Cuestión diferente es que el nivel técnico del código de muchas de estas clases en la biblioteca puede exceder la capacidad de muchos de nosotros para comprenderlo.
Las interfaces, como bien sabes, no definen métodos, tan solo los declaran de manera abstracta. Para encontrar su *concreción* debes investigar las clases que implementan las interfaces. Encontrar estas implementaciones en el _framework_ de Colecciones de Java puede ser un trabajo más arduo y laberíntico de lo acostumbrado debido a la estrecha interconexión que hay entre las interfaces, clases abstractas y clases concretas de esta API y su abundante número.
Si tienes curiosidad, aquí te dejo un fragmento del código de determinadas _inner classes_ embebidas en la clase predefinida *HashMap* de la API de Java que puedes encontrar interesantes para tu consulta:
/* ------------------------------------------------------------ */
// iterators
abstract class HashIterator {
Node next; // next entry to return
Node current; // current entry
int expectedModCount; // for fast-fail
int index; // current slot
HashIterator() {
expectedModCount = modCount;
Node[] t = table;
current = next = null;
index = 0;
if (t != null && size > 0) { // advance to first entry
do {} while (index < t.length && (next = t[index++]) == null);
}
}
public final boolean hasNext() {
return next != null;
}
final Node nextNode() {
Node[] t;
Node e = next;
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
if (e == null)
throw new NoSuchElementException();
if ((next = (current = e).next) == null && (t = table) != null) {
do {} while (index < t.length && (next = t[index++]) == null);
}
return e;
}
public final void remove() {
Node p = current;
if (p == null)
throw new IllegalStateException();
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
current = null;
removeNode(p.hash, p.key, null, false, false);
expectedModCount = modCount;
}
}
final class KeyIterator extends HashIterator
implements Iterator {
public final K next() { return nextNode().key; }
}
final class ValueIterator extends HashIterator
implements Iterator {
public final V next() { return nextNode().value; }
}
final class EntryIterator extends HashIterator
implements Iterator {
public final Map.Entry next() { return nextNode(); }
}
Tengo una pequeña duda.
// porque aqui no fue necesario usar el NEW, para crear el it.?
Iterator it = clientesBanco.iterator();
Iterator es una Interfaz, no una clase. El método iterator() pertenece a la Interfaz Collection y devuelve un objeto de tipo Iterator. Por eso creamos una variable de tipo Iterator (llamada it) para almacenar el objeto Iterator que devuelve el método iterator() al aplicarlo sobre la colección clientesBanco.
Si echas un vistazo en la API a estas interfaces y métodos que te menciono, lo entenderás mejor. Un saludo!!
Entendi, muchisimas gracias. ¡Saludos!
Profe tengo una duda.. las pilas (Stack) en java, tambien se consideran como Colecciones o no?
Sí. Echa un vistazo a este enlace, puede que te aclare algo: www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=630:coleccion-de-objetos-de-tamano-variable-java-listas-pilas-colas-collection-list-set-queue-map-cu00664b&catid=68&Itemid=188
Un saludo!
Buenas Juan, muy buen video, una cosa, yo tengo Java 8.0, y si que me deja en un forEach borrar un elemento, no se si en la última versión de Java lo han agregado. Un saludo
+victor DG Tendré que revisar esto que comentas... La versión 8 trae bastantes novedades y me estoy enterando por vosotros... Un saludo
A mí con Java 8 tampoco me aparece la excepción.
Saludos.
+victor DG, lo que dices es cierto y parece que la nueva versión de Java 8 acepta modificar la colección a la vez que se recorre... :D! Saludos
Hola vas a explicar algo como crear aplicaciones moviles con java ? android
+Cumbia Galluci Hola !! Cuando termine este curso (que aún queda), comenzaré un curso nuevo de Android. Un saludo
Bien ahi gracias
Una duda el curso va a ser desde cero también explicaras java?
hay que ver este curso de java para saber android?
para sacar la info directo del iterador se me ocurre, dame tu opinión realmente no lo probe:
Iterator it = clientesBanco.iterator();
while(it.hasNext()) { // hasta aqui igual al tuyo
cliente Auxiliar = it.next(); // AQUI ES LA NOVEDAD, esto me dejaria hacer lo siguiente
system.out.println(Auxiliar.getNombre());
system.out.println(Auxuliar.getN_cuenta()); // asi uso un solo next() y puedo imprimir lo que uiera
}
¿Qué carrera has hecho?
Carrera nivel Dios
Yo hice esto:
for (Cliente cliente : clientesBanco) {
if(!cliente.getNumeroDeCuenta().equals(cl3.getNumeroDeCuenta()))
System.out.println(cliente.getNombre());
}
Y si metes lo que quieres borrar por scanner? A mi esto de ma la excepcion de concurrent Modification Exception
private ArrayList coleccion = new ArrayList();
Iterator iter = coleccion.iterator();public String borrarArticulo() {
String codigo = null;
System.out.println("Por favor introduzca el codigo del articulo");
codigo = teclado.nextLine();
//ValidarCodigo(codigo);
while (iter.hasNext()) {
String variable = iter.next().getCodigo();
if (variable.equals(codigo)) {
iter.remove();
System.out.println("Producto eliminado");
}
}
return codigo;
}
Para imprimir todos los datos del cliente con el Iterador bastaría con crear una instancia del objeto Cliente, en vez de crear un objeto de tipo string y luego imprimir todo en consola con los métodos getters. así:
while (iterator.hasNext()){
ClienteI cliente=iterator.next();
System.out.println("Nombre cliente: "+cliente.getNombre()+". Número de cuenta: "+cliente.getNumero_cuenta()+". Saldo disponible: "+cliente.getSaldo()+"€");
}