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.
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.
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 llavey 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 amayor.
.
.
.
++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.
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).
Gracias compañero, me ayudo a entender un poco más la clase.
¡Increíble aportación! Muchas gracias
Hola, al igual que tu me perdí en este vídeo ¡No te rindas!
Tal vez es porque esta parte es más de programación y no de objetos que es el énfasis del curso.
Solo es cuestión de practica, Si se puede !!!
Me parecio que este ejemplo fue uno muy malo para introducir al tema de Map, la curva de dificultad se disparó!
Exacto, muy mal ejemplo. Ademas los arboles se explican diferente, ya que es una estructura muy diferente a lo que se venia tratado en el curso.
Completamente de acuerdo
ajajajaja}
jajajajjaa
No entendi nada jaja
jajajajaja
Creo que faltó profundizar en el tema de Collections, se debió hacer un vídeo de eso sea más entendible éste tema.
todo va enlazado para saber de collections se debe saber de estructuras de datos, pero concuerdo con lo que dices debió explicar mas a profundidad el tema de las colecciones primero con unos ejemplos mas sencillos y después si implementarlo en el proyecto para que todo quedara mas claro
Creo que fue un error no hacer un video en una clase previa sobre Collections con ejemplos mas simples
Bastante complejo me ha parecido, pero interesante. He tenido que ver cada video unas 3 veces.
Así es al principio, no te preocupes jeje
Muy confuso la lógica, no se logra tener el objetivo claro. No me gustó esta clase.
Voy copiando el codigo y todo funciona, pero no siento que estoy aprendiendo, deberian dar mas ejersicios y libertad al estudiante.
Yo también siento lo mismos, solo copio el codigo y ya.
Pienso igual, no sé si debí escogerlo como mi primer lenguaje, ya que está bien complejo y para uno que está iniciando le queda más facil aprender por medio de retos, por ejemplo yo hice el curso de fundamentos en python y se iban dejando retos cada 3 clases para uno colocar a prueba las habilidades que iba aprendiendo.?
el nivel se disparo de un video a otro, jejeje toco repetirlo como 10 veces.
Igual ese tema primero se introduce de forma grafica, es mas facil de entender asi. Este video si estuvo flojo.
sinteticé un poco esta parte de “showBookAppointmentMenu” para que sea mas comprensible:
int k =0;for(Doctor doctor:UIDoctorMenu.doctorsAvailableAppointments){Map<Integer,Doctor> doctorAppointments =newTreeMap<>(); 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);}}
Fantastico yo hice un enfoque bastante parecido y efectivamente el arrayList que se crea dentro del ciclo esta de mas
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!!
Ya que yo tuve que releer mucho el codigo, siento que había una manera mas facil de hacerlo y que el primer for si hizo e mas :'v, o quien sabe cual es el enfoque de mostrar solo Date son saber q que doctor pertenece
Hola comunidad, ¿Por que se prefirio utilizar la coleccion Map en lugar de List?
Buenas! Los Map tienen un potencial muy grande, son diccionarios de datos que tienen un uso muy práctico y más eficiente que los List. Un List básicamente es una lista enlazada (si no manejas punteros puedes investigar un poco o preguntar), su principal ventaja sobre los vectores es que no tenemos el limitante del índice ahora los Map ofrecen un formato de "Key, Value" lo cual, a la hora de trabajar con bases de datos, le da una gran ventaja sobre los List ya que en el volcado de datos es más natural trabajar de esa manera.
Aún no llegué a esa parte del curso pero creo que se eligió esa colección por el enfoque que se tendrá más adelante (bases de datos).
Aquí te dejo unos enlaces para que veas los diferentes tipos de colecciones:
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
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
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..