Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 8

List (ArrayList, LinkedList)

Ejemplos de listas cotidianas: to-do lists, listas de invitados.


Orden: alfabetico o numerico

ListADT

Tipos de listas:
● Ordenada: ordenadas por un valor especifico (ej alfabeticamente)

● Desordenada: los elementos no tienen orden inherente más que su lugar en la lista.
Aunque aparentemente carezcan de orden, este puede ser determinado por el usuario.

● Indexada: el orden es definido por el usuario. Se diferencian de las listas desordenadas


porque los elementos tienen un índice numérico que inicia en 0 al inicio de la lista y
continúa hasta el final.
Listas vs Arreglos

La lista mantiene sus índices contiguos, es decir si un elemento es removido, la lista se colapsa
para eliminar el espacio. De la misma forma cuando un elemento es insertado los otros
elementos son movidos para crear espacio.

Operaciones comunes de listas


Iteradores

A diferencia de la una cola o una fila, en las que solo se puede acceder al primer o último
elemento de la colección, en las listas podemos acceder a cualquier elemento. Por esta razón
se necesita un iterador.

Un iterador es un objeto que permite iterar sobre una colección, es decir, repetir un proceso
para alcanzar una meta, cada proceso es denominado “iteración”, los resultados de una
iteración son el punto de partida de la siguiente.

Las colecciones en java tienen una forma de iterar sobre sus elementos, en el caso de las listas
el método regresa un objeto ​Iterator​.

Métodos primarios abstractos del iterador:


● hasNext: ​regresa true si hay mas elementos
● Next​: regresa el siguiente elemento de la iteración.

El método ​iterator ​de la interfaz ListADT regresa un objeto que implementa esta interfaz.
El orden que sigue el iterador para recorrer los elementos de una lista es lineal.

Tipos de iterador:
● Permiten modificación de la colección y reflejan los cambios mientras se itera
● Trabajan con una copia de la colección por lo que las modificaciones no tienen impacto.

Es necesario implementar la interfaz del iterador (​Iterator interface​).

Agregar elementos

Lista ordenada: agrega el elemento en una posición específica basado en su valor llave.

Lista desordenada: agrega el elemento al frente, inicio o entre dos elementos específicos.
Lista indexada: un elemento nuevo se agrega a un índice específico. El resto de los índices
deben ser modificados. Es posible que el elemento de un índice sea sobrescrito y no afecte el
resto de los índices.

Ya que los diferentes tipos de listas comparten la mayoría de sus métodos, dichos métodos
pueden definirse una sola vez. Por ello, se definirán 3 interfaces: una con los métodos comunes
y dos con los métodos propios.
ADT (Abstract Data Type)

Solo definen el comportamiento pero no la implementación.


Contrario al ADT está el CDT (Concrete Data Type), contiene la implementación del ADT.
● Ejemplos en Java:
○ Array, List, Map, Queue, Set, Stack, Table, Tree, y Vector son ADTs. Each of
these ADTs have many implementations i.e. CDT. Container is a high-level ADT
of above all ADTs.
● Ejemplo Real:
○ Libro es Abstract (Guia Telefonica es la implementación).

Interfaces y Polimorfismo

Los tipos genéricos ​<T>​ se usan para guardar cualquier tipo de objeto en una colección.
Aunque en el caso de las colecciones ordenadas, se agrega una restricción, los objetos deben
implementar la clase​ Comparable​. Esto es necesario para usar el método ​compareTo​, que nos
permitirá ordenar los elementos en la lista.

Una clase es usada para declarar el tipo de objeto al que una variable hace referencia.
Similarmente, una interfaz es usada como la referencia de una variable. Dicha variable puede
usarse para referirse a cualquier objeto de cualquier clase que implemente esa interfaz.

Ej:

Interfaz Speaker:

public interface Speaker


{
public void speak ( );
public void announce (String str);
}
Puede ser usada para declarar una variable que haga referencia a Speaker:

Speaker current;

La variable de referencia puede usarse para referirse a cualquier objeto que implemente la
interfaz Speaker, por ejemplo la clase philosopher:

Current = new Philosopher ( );

El usar interfaces hacemos referencias polimórficas, excepto que los objetos son relacionados
al implementar la misma interfaz en lugar de ser relacionados por herencia.

Por ejemplos al crear una clase Dog que implemente la interfaz Speaker tambien podria ser
asignada a una variable que referencie Speaker.

Speaker guest;
guest = new Philosopher();
guest.speak(); //invoca el método de philosopher
guest = new Dog();
guest.speak(); // invoca el método de Dog

Al referenciar interfaces solo se pueden invocar los métodos definidos en la interfaz. Por
ejemplo si la clase Philosopher tiene un método propio llamado escribir no podrá ser usado.

Speaker special = new Philosopher ( );


special.escribir ( ); //genera error de compilación
El compilador solo determina que el objeto es de tipo Speaker, y como la variable puede
referirse a la clase Dog (que no puede escribir) no permite la referencia al método. Sin embargo
el método puede ser llamado con un cast.

((Philosopher) special).pontificate();

Las interfaces también pueden ser usadas como parámetros:

public void sayIt (Speaker current)


{
current.speak();
}

Todos los elementos de una lista ordenada comparable pueden hacer referencia a una interfaz.
Esto significa que cualquier objeto de cualquier clase que implemente la interfaz ​Comparable
puede ser almacenado en instancias de una lista ordenada.

Sin embargo, solo tener objetos que implementen la interfaz ​Comparable​ no significa que
puedan ser comparados entre ellos, solo que puedes ser comparados objetos del mismo tipo.
La interfaz ​Comparable​ es es generica:

<T extends Comparable<T>>

Esto sigue causando problemas. Por ejemplo, Dog y Philospher son subclases de Mammal y
esta a su vez implementa la interfaz ​Comparable<Mammal>.​ Esto significa que philosopher y
dog pueden ser comparados con otros mamíferos, no solo con los de su clase.

Usar ​<T extends Comparable<T>>​ no permitiria crear una lista ordenada de filosofos ya que
estos son comparables con otros mamíferos. La mejor solución es incluir el comparable de ​T​ y
de la superclase de ​T​ que implemente ​Comparable​:

<T extends Comparable<? super T>>

USar Listas Ordenadas

Cualquier evento deportivo suele ser organizado en una lista que indica el numero de victorias
por equipo. Una lista ordenada puede ayudarnos a almacenar y ordenar los equipos segun su
numero de victorias.
Al finalizar la primer ronda los equipos son organizados de tal forma que se enfrenta el primero
vs ultimo, segundo contra penultimo hasta que no queden mas equipos por enfrentar. PAra las
rondas siguientes los equipos organizados de acuerdo al numero de juego de la segunda
ronda.
Para implementar un programa llevar a cabo la primer ronda del torneo requiere antes que
anda crear la clase equipo.

Equipo: nombre del equipo y numero de victorias.

Tambien requiere un metodo que compare a los equipos entre si. COMPARETO ().
Regresa -1 si el primer equipo tiene menos victorias que el segundo.
Regresa 0 si estan empatados
Regresa 1 Si el primer equipo tiene mas victorias que el segundo.

Usar Listas Indexadas


Problema de Flavio Josefo
Historiados judio que segun la leyenda era parte de un grupo de 41 judios que fueron
emboscados por los romanos, pero decidieron matarse antes de ser atrapados.
Decidieron formas un circulo y matar a cada tercer persona hasta que no quedara nadie.
Josefo no queria morir y calculó donde deberia pararse para quedar al final y evitar morir.
De esta forma nacio un nuevo tipo de problema conocido como el problema de Josefo.
En estos problemas lo importante es encontrar el ​orden de los eventos cuando los elementos
de la lista no obedecen a un orden​, sino que son tomados cada ​iesimo ​lugar.
Los elementos son considerados como una lista continua por lo que se elimina el 
2do elemento

También podría gustarte