Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Curso de Java SE Orientado a Objetos

Curso de Java SE Orientado a Objetos

Anahí Salgado Díaz de la Vega

Anahí Salgado Díaz de la Vega

Recorriendo estructuras de árbol en Java

36/38
Recursos

Las estructuras de árbol pertenecen al grupo de estructuras de datos no lineales, es decir, donde toda la información es almacenada con un orden específico. En estas estructuras tenemos “troncos” principales con diferentes ramificaciones que surgen a partir de ellos. Son muy útiles para trabajar con grandes cantidades de datos organizados de forma jerárquica.

La forma de implementarlos en Java es usando un Map de tipo TreeMap. Recuerda que también podemos guardar Maps dentro de otros Maps. De esta forma podemos definir una lista ordenada de doctores y sus fechas disponibles para agendar citas médicas.

// 1. Doctor#1
// - - - Fecha#1
// - - - Fecha#2
// 2. Doctor#2
// - - - Fecha#1
// - - - Fecha#2
// 3. Doctor#3
// - - - Fecha#1
// - - - Fecha#2
Map<Integer, Map<Integer, Doctor>> doctors = new TreeMap<>();

Aportes 58

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Hola, al igual que tu me perdí en este vídeo ¡No te rindas!

Como muchos compañeros han expresado , todos nos hemos perdido pero animo , sigue viendo el video una y otra y otra vez hasta que lo comprendas.
Por consiguiente Tratare de describir lo mas explicativo posible para ayudarte a acelerar el proceso :
1.- La profesora hace uso de la interfaz Map en especifico la clase Treemap, que en clases anteriores podrás observar toda la documentación que dejaron acerca de esta Interfaz entre otras , para que no tengas que ir hasta allá te dejo un resumen para TreeMap.
2.- Cuando Se utilizan Estructuras de Arbol?
Usar los diagramas de árbol al trabajar con grandes cantidades de datos con una estructura jerárquica. Cuando existe una correlación entre el color y el tamaño, los diagramas de árbol ayudan a identificar patrones que, de otro modo, serían difíciles de ver.
Los diagramas de árbol también son eficaces para facilitar la lectura porque muestran grandes volúmenes de información en una misma pantalla. Quienes los observan pueden profundizar en una categoría específica para hacer más investigaciones.
https://help.highbond.com/helpdocs/highbond/es/Content/visualizations/interpretations/charts/treemap_chart.htm
3.- Por tanto Eligio hacer uso de Map ya que es una estructura mas compleja que un “Collection”, En la que su mayor particularidad es venir enparejado con otro dato, es decir describes la llave y el elemento emparejado a esta.
3.1.- Es algo parecido a como funciona la llaves en las bases de datos , Un ejemplo podría ser la lista de alumnos en la escuela con la cual pasaban asistencia , si recuerdas o si te ha pasado , cuando tocaba la hora de dar examen, habían maestros que te pedían escribir en la parte superior derecha del examen el numero que te correspondía en la lista de asistencia , es decir de 60 alumnos , Carlos alfredo soria era el numero 45 de la lista de asistencia , por tanto con el simple numero de 45 que seria mi Key , describe algo como : El alumno inscrito Carlos Alfredo Soria.
4.- Los map se declara de la siguiente forma :
Map<Integer , String> treemap = new TreeMap <Integer,String>();
4.1.- En la sintaxis diamante lo que se hace es especificar primeramente el Key(Integer) y Despues el Value(String).
4.2.- En la funcionalidad TreeMap : El mapa los ordena de forma natural , es decir si ingresamos enteros , los ordenara de menor a
mayor.
.
.
.

Describiendo en el video :

1.- Por el minuto 02:45 la profesora hace un repaso de la “estructura de datos” la cual se hizo a partir de los diferentes elementos de abstracción :
En dicha estructura tenemos una lista de doctores , en el q cada doctor se crea mediante la clase Doctor , generando dicha lista como la que
describe en el video…
doctor1 , doctor2 , doctor3 , etc. (Recuerda que ella creo tres doctores como ejemplo).
1.1.- Cada uno de estos doctores tiene un ArrayList de citas disponibles (fechas) , a este ArrayList se le dio el nombre de availableAppointments, significa que por cada objeto Doctor se podría generar una lista de fechas , dicha lista en caso de haber fechas y horarios se almacena en el ArrayList ya antes mencionados.

Nos Muestra una estructura de este tipo :

        // [Doctors] 
       //1.- doctors1
            //1.- fecha1
            //2.- fecha2
       //2.- doctors2
       //3.- doctors3

2.- En doctorsAvailableAppointments se almacenara una lista de doctores pero q tengan citas confirmadas (OJO) , es decir , aquellos doctores que se dieron la molestia de ingresar a la App e introducir las fechas y horarios para los que ellos están disponibles.
2.1- En la siguiente linea :
for (int i = 0; i < doctorsAvailableAppointments.size() ; i++){
De la clase UiPatientMenu fue escrita con la idea de tener performance , ya que con el método size() aplicado al ArrayList doctorsAvailableAppointments es posible saber el numero exacto de objetos(doctores) que vamos a utilizar para imprimir en pantalla.
Sin el ArrayList mencionado podría suceder que tengamos 25 doctores y no es correcto tener que recorrer 25 objetos en busqueda de Fechas Disponibles cuando es mucho mas eficiente almacenar en una lista de doctores(Que puede que sean 5 o menos de 25) que Si han confirmado para brindar atención(Al confirmar atención se tiene la seguridad de que existe fechas disponibles dentro del ArrayList availableAppointments de cada doctor en particular) , además de tener información validada , accesible(recordar que el Arraylist doctorsAvailableAppointments es Stactic) y a la mano.
.
.
Por tanto se concluye que si un Doctor esta listado en doctorsAvailableAppointments significa que hay una lista de fechas disponible en availableAppointments para ese doctor en particular.
3.- En la siguiente linea :
ArrayList<Doctor.availableAppointment> availableAppointments = doctorsAvailableAppointments.get(i).getAvailableAppointments();
3.1- Se crea un nuevo ArrayList llamado availableAppointments del tipo de Objeto Doctor.availableAppointment , recordando que es un tipo de objeto de la subclase availableAppointment
…YYYYYYYYYYY Si!!! tiene el mismo nombre que el ArrayList declarado anteriormente en la clase Doctor , pero tiene su motivo , Te lo explico :
La idea del declarar dicha linea es la de recorrer y obtener cada uno de los doctores listados en doctorsAvailableAppointments
que se los obtiene haciendo uso del metodo get() de la clase ArrayList e indicando el índice mediante la variable i que esta siendo iterado por el For-i.
Por tanto al instante de Obtener el Objeto Doctor en especifico mediante la iterancia del For-i también se obtiene acceso al ArrayList availableAppointments pero a el availableAppointments de la clase Doctor, que recordemos es donde esta almacenado la lista de Fechas y Horarios para ese Objeto (doctor) en particular.

3.2.- Siendo el objetivo final asignar el ArrayList de availableAppointments de la clase Doctor al
ArrayList de availableAppointments de la clase UiPatientMenu , ya que es bueno recordar que el availableAppointments de la clase Doctor NO es Static sino Private y se accede a el mismo mediante el método de la clase Doctor , getAvailableAppointments() .
.
.
.
por tanto concluir que la idea fundamental de la presente linea de código es la de extraer un buen pedazo de información desde una clase (En este caso Doctor) para almacenar dicha informacion en la clase de donde esta siendo declarada dicha linea (UiPatientMenu).

Me parecio que este ejemplo fue uno muy malo para introducir al tema de Map, la curva de dificultad se disparó!

Creo que faltó profundizar en el tema de Collections, se debió hacer un vídeo de eso sea más entendible éste tema.

No entendi nada jaja

Bastante complejo me ha parecido, pero interesante. He tenido que ver cada video unas 3 veces.

Muy confuso la lógica, no se logra tener el objetivo claro. No me gustó esta clase.

el nivel se disparo de un video a otro, jejeje toco repetirlo como 10 veces.

sinteticé un poco esta parte de “showBookAppointmentMenu” para que sea mas comprensible:

int k = 0;
for(Doctor doctor: UIDoctorMenu.doctorsAvailableAppointments)
{

	Map<Integer, Doctor>  doctorAppointments = new TreeMap<>();

	int j = 0;
	for(Doctor.AvailableAppointment appointment : doctor.getAvailableAppointments())
	{
		k++;
		System.out.println(k + ". " + appointment.getDate());
		doctorAppointments.put(Integer.valueOf(j++), doctor);
		doctors.put(Integer.valueOf(k), doctorAppointments);
	}

}

Como dicen por ahí…aprender duele !!

Pienso que otra manera efectiva de entender el código que realizó nuestra Profesora Anahí, es descargando el proyecto y correrlo en nuestras maquinas modo ‘Debug’, ver paso a paso lo que hace el código y evitaremos repetir la clase tantas veces.
Saludos!!

Una clase bastante compleja a mi parecer. se alteraron algunas cosas que ya se había hecho previamente para que pudiera funcionar la lógica que se estaba aplicando de los maps y queda algo en el aire o no quedan muy claras estas modificaciones…
Recomendaría que en el curso básico de javaSE, se profundice mas sobre este tema, ya que de por si manejar estructura de arboles puede ser algo complejo y confuso, mas para los que estamos empezando y así aprovecha y hacer una explicación mas detallada del uso o aplicación del MAP que es una herramienta bastante potente…

Otro video que hay que ver a 0.85x.

No es por nada pero hoy si me quede viendo luces




Siento que fue muy rápida esta parte, se enfoco mas en la implementacion que en explicar a profundidad la logica detras de un TreeMap

Creo que fue un error no hacer un video en una clase previa sobre Collections con ejemplos mas simples

Estuvo muy bien el curso. Siento que en los últimos videos hubo algo de premura, había contenidos muy interesantes y complejos que tal vez sería bueno tratarlos con más calma (a mi modo de ver). De igual manera Anahí es una excelente profe y el curso ha sido muy enriquecedor.

Pareciera que se quedaron sin tiempo y pusieron todo el contenido restante deprisa sin tomarse el tiempo de explicarlo debidamente.

La verdad fue muy rapido y el curso iba como si en algun video anterior ya fueran explicado esta parte. Pro lo menos yo no he visto algun video donde se detengan a explicar con calma esto como lo han hecho con otras cosas. Ahi vamos.

Curioso cuando dice: "usemos esto que lo venimos manejando varias veces", cuando en realidad se ha dedicado solo a programar mas no a fundamentar porque se usa uno u otra cosa. Realmente los ultimos capitulos bastante pesimos.

Las ultimas clases se han puesto rapidas XD

Compañeros, por hoy me rindo, mañana vere nuevamente desde el video 32. A descansar para volver a luchar. Arriba el animo a todos!

En un momento regreso señores, me toca que ir a investigar todo hacer da map si no, no puedo entender la clase …

hay los alcanzo al rato.

🌳 Un árbol es usada con frecuencia en la Inteligencia artificial.

Super!!

Muchas gracias por la clase instructora Anahí, en esta se puede observar la aplicación de los conocimientos previos y el ejemplo que acompaña al post sobre Collections, enlace: https://platzi.com/clases/1629-java-oop/21597-collectio-1/

Una clase que explica los collections. Me ayudo a entender un poco esta clase
https://platzi.com/clases/1222-java-basico-2018/10029-interfaz-list-arraylist-y-vector/

Leí muchas quejas en este video, pero es que les hace falta conocer más sobre Collections y estructuras de datos en Java, un tema que en lo particular se me hace fascinante. Quizá no sería tan mala idea, estimado Platzi, que crearan un curso específico sobre esto.

Estuvo potente esta clase 😅, pensar en los treemap como Dictionarys de python me ayudo bastante a comprender la lógica que uso en esta parte.

Por si no le entendieron:

System.out.println("::Book an appointment");
            System.out.println("::Select date:");
            Map<Integer, Map<Integer,Doctor>> doctorsGREAT = new TreeMap<>();
            int k = 0; //Esta variable sera el indice de toda la estructura de arbol
            if (UIDoctorMenu.doctors.isEmpty()){//Si no hay ningun doctor loggeado(y con appointments) entonces se rechaza la peticion
                System.out.println("There's not doctors with available appointments!");
            } else {//Se recorre todos los doctores que hay loggeados y con appointments
                for (int i = 0; i < UIDoctorMenu.doctors.size(); i++) {

                    Map <Integer,Doctor> doctorsInsideDoctors = new HashMap<>(); //Se crea le arreglo treemap que se guadara dentro del treemap anteriormente declarado
                    for (int j = 0; j < UIDoctorMenu.doctors.size(); j++) { //Se crea otro fori debido a que ahora iteraremos UIDoctorMenu.doctors dentro de doctorsInsideDoctors, los meteremos para despues meterlos en el primer treemap, como muñecas rusas
                        doctorsInsideDoctors.put(j,UIDoctorMenu.doctors.get(i)); //Se obtiene cada doctor i dentro de una key j
                        doctorsGREAT.put(k,doctorsInsideDoctors); //todo este map se mete dentro de doctorsGREAT pero con una key K que perdura fuera de estos for

                    }
                }
                int responseDateSel =Integer.parseInt(scanner.nextLine());
            }

Hay una asignacion redudante que jamas utiliza Anahi y de hecho se vuelve medio raro, tambien su otro error es que a las variables las nombre como doctors appointment cuando en realidad solo esta guardando doctores ahi, pero ps ahi esta pa mas facil

Siento que se debió haber hecho una introducción a Map mediante ejercicios más simples que nos dieran más facilidad a la hora de trabajar con Map.

Esta clase si estuvo algo revuelta

Nooo. !
Perdido por completo.

una clase poco clara

Excelente conocimiento compartido

Tuve un problema con el Tree, pero ya pude arreglarlo de una manera efectiva

ejale 😃

Muy claro el ejemplo, Se asume que para un curso de POO, se deben tener conceptos de algoritmia y del Paradigma imperativo.

de verdad hay que remirar unas 3 veces al menos para entender, no que sea difícil sino que esta todo junto y como que se va volviendo todo complejo y entrevera

Veo muchas quejas por acá. En código legacy es muy común que se mire este nivel de complejidad, incluso con peor estructuración.

Anahí dice KK (caca)

falto tocar el tema de collections de una mejor manera , no se entiende,

Cual es la ventaja de manejar Map vs extraer los parametros o datos en general de una BD?

Consejo del día: para esta las 3 clases anteriores sería recomendable que veas algunos fundamentos de base datos, ya que estos ejemplos estan muy orientados a esos temás más en especifico a lo que se conoce como llaves primarias (PK), llaves foráneas (FK) y **cardinalidad **(esto solo es necesario si quisieras aprender más de UML)

Holap. A ver… no soy experto pero creo que puedo explicar esto. La colección Map es una clase y tiene algunas subclases como Hashmap o Treemap. Map funciona con dos valores (<Key>,<Value>)que se tienen que especificar cuando se añada un nuevo elemento con su método put.La diferencia entre estas dos es que Treemap te ordena todos los elementos de acuerdo a su key.

La complejidad de esta clase (nunca antes mejor dicho), fue creada para evitar las críticas del tipo: “Los cursos de Platzi son básicos”. Estoy completamente seguro de eso.

Pensé que era el único como mínimo repetía 3 veces cada video , es un salto de dificultad muy considerable . Concuerdo con todos que falta profundizar más los temas.

Hola buenas días, si llevaron javascript Map<K,V> es lo mismo la función map = array.map( item => item) solo es mapear el array y poderle dar un formato.

La verdad no entendi nada de nada solo estuve copiado haber si se me pegaba algo pero no fue asi

El curso es muy bueno, no se preocupen si se pierden en esto, en la universidad las estructuras de datos complejas como árboles se ven después de hasta 3 semestres. No se rindan que lograran crear sus propias estructuras de datos personalizadas si es necesario.

esta rudo pero a vamos a ver como logramos nivelarnos

wow

Tanta cosa para saber que un Map almacena datos como un JSON, por llave valor … muy enrredado este video la verdad

Bueno, pues nada, a investigar más sobre Colletions y estructuras de árbol de Java, porque como ya dijeron muchos en los comentarios, con la explicación tan pobre que dio Anahí esta Clase no hay forma de comprender bien este tema tan denso

solo hay que ver el video despacio para una mejor comprención de lo explicado

Yo solo vi que puso MAP y luego un montón de letras jajaja.