






















Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
ejercicios, evaluacion,. trabajo, colaborativo
Tipo: Ejercicios
1 / 30
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!























Palabras clave : estructura lineal, lista, representación, operación.
Definición
Conceptos básicos
Listas en lenguaje Java
Implementaciones de listas
Aplicabilidad
Operaciones básicas
Una lista es una secuencia finita de elementos del mismo tipo. Por medio de la notación:
〈x
0
, x
1
, x
2
, … ,x
n-
se representa una lista cuyos elementos son x
0
, x
1
, x
2
, … , x
n-
, en ese orden. Para denotar la lista
vacía, que no tiene ningún elemento, es usada la expresión:
Es importante tener en cuenta que en toda lista importa el orden en el que se encuentran sus
elementos.
Las listas tienen gran aplicabilidad como estructuras de datos porque permiten almacenar elementos
en secuencia, un elemento seguido de otro. En la cotidianidad existen listas por doquier, por ejemplo:
La lista de alumnos registrados en una asignatura.
La lista de asistencia a clase.
La lista de personas que asisten a un evento.
La lista de actividades a realizar en el día.
La lista de los artículos que hay que comprar en el supermercado.
La lista de los artículos comprados en la tienda, en el orden en que aparecen en el recibo de
compra.
Nótese que el primer elemento de la lista se encuentra en la posición cero y que el último elemento
se encuentra en la posición correspondiente al tamaño de la lista menos uno.
3.4. Siguiente
Cada elemento de la lista, excepto el último, tiene un siguiente elemento. Por ejemplo, el siguiente
del primero es el segundo, el siguiente del segundo es el tercero, etc. En general, el siguiente
elemento del que está en la posición i es el que está en la posición i +1.
3.5. Anterior
Cada elemento de la lista, excepto el primero, tiene un anterior elemento. Por ejemplo, el anterior del
segundo es el primero, el anterior del tercero es el segundo, etc. En general, el anterior elemento del
que está en la posición i es el que está en la posición i - 1.
3.6. Recorridos
Un recorrido de una lista es una forma de visitar todos los elementos de la lista. Dos posibles
recorridos de una lista son:
Recorrido al derecho, visita los elementos de la lista en el orden que aparecen, comenzando por
el primer elemento y terminando en el último.
Recorrido al revés, visita los elementos de la lista en el orden contrario al que aparecen,
comenzando por el último elemento y terminando en el primero.
3.7. Igualdad
Dos listas son iguales si y solo si tienen el mismo tamaño y almacenan los mismos elementos en las
mismas posiciones.
3.8. Contenencia
Una lista está contenida dentro de otra si y solo si todo elemento de la primera está presente dentro
de la segunda, así sea en distinto orden.
3.9. Sub-listas
Una lista es sub-lista de otra si y solo si todos los elementos de la primera aparecen en el mismo orden
a partir de alguna posición de la segunda.
3.10. Ejemplos
Las tablas 1 y 2 presentan ejemplos sobre todos los conceptos básicos presentados hasta ahora.
Tabla 1. Ejemplos sobre posición, tamaño, ordinales, siguiente, anterior y recorridos
Concepto Lista Ejemplo
Posición
El elemento de la posición —1 de la lista está indefinido,
porque esta posición se encuentra por fuera de la lista.
El elemento de la posición O de la lista es 18.
El elemento de la posición 1 de la lista es 12.
El elemento de la posición 2 de la lista está indefinido,
porque esta posición se encuentra por fuera de la lista.
El elemento de la posición 3 de la lista está indefinido,
porque esta posición se encuentra por fuera de la lista.
Fuente : Sotelo (s.f.)
Tabla 2. Ejemplos sobre igualdad, contenencia y sub-listas
Lista 1 Lista 2
¿La lista 1
es igual a
la lista 2?
¿La lista 1
está contenida
en la lista 2?
¿La lista 1
es sublista
de la lista 2?
Fuente : Sotelo (s.f.)
Concepto Lista Ejemplo
Recorridos
Al derecho: visita los elementos en el orden 18, 12.
Al revés: visita los elementos en el orden 12, 18.
Recorridos
Al derecho: visita los elementos en el orden 79, 35,
58, 21, 10, 39.
Al revés: visita los elementos en el orden 39, 10, 21,
58, 35, 79.
Para administrar el contenido de una lista, existen cuatro operaciones básicas:
A. Consulta, que sirve para obtener el valor presente en una posición dada.
B. Modificación, para cambiar el valor presente en una posición dada.
C. Inserción, para añadir un nuevo elemento en cierta posición de la lista.
D. Eliminación, para quitar de la lista el elemento que está en cierta posición.
Nótese que todas las operaciones básicas se definen en términos de posiciones. Por medio de la tabla
3 se ejemplifica la aplicación de las operaciones básicas; donde en cada paso se resaltan en amarillo
los elementos consultados, se resaltan en azul los elementos modificados, se resaltan en verde los
elementos insertados y se resaltan en rojo los elementos que van a ser eliminados en el siguiente paso.
Tabla 3. Ejemplos de operaciones básicas sobre listas
Lista Operación Descripción de la operación realizada
〈 〉 Creación Creación de una lista vacía.
Inserción
Inserción del elemento 53 en la posición 0.
(inserción al final)
Inserción
Inserción del elemento 39 en la posición 1.
(inserción al final)
Inserción
Inserción del elemento 47 en la posición 2.
(inserción al final)
Inserción
Inserción del elemento 40 en la posición 0.
(inserción al principio)
Inserción
Inserción del elemento 58 en la posición O.
(inserción al principio)
Inserción
Inserción del elemento 29 en la posición O.
(inserción al principio)
5.1. Interfaz List
En el área de la programación orientada a objetos, una interfaz es un conjunto de métodos definidos
sin implementación. List
1
El tipo E es genérico, es decir, puede ser cualquier clase en Java. Por ejemplo, List
representa una lista de números enteros, List
List
List
5.2. Implementaciones suministradas por Java para la interfaz List
En este documento, se introducen dos implementaciones de Java para la interfaz List
ArrayList
La figura 1 muestra una representación gráfica de la forma en que se disponen los datos en
esta implementación.
LinkedList
encabezado. La figura 2 muestra una representación gráfica de la forma en que se disponen
los datos en esta implementación.
Figura 1. Representación de la lista 〈x
0
, x
1
, x
2
, … ,x
n-
〉 con la clase ArrayList
Fuente : Sotelo (s.f.)
La interfaz List
com/javase/8/docs/api/java/util/List.html
Figura 2. Representación de la lista 〈x
0
, x
1
, x
2
, … ,x
n-
〉 con la clase LinkedList
Fuente: Sotelo (s.f.)
5.3. Servicios provistos por la interfaz LIST
La tabla 4, es un listado de los veinticinco métodos ofrecidos por la interfaz LIST
Tabla 4. Métodos incluidos en LIST
Método Descripción
Operaciones de consulta sobre lista
int size ( ) Retoma el tamaño de la lista.
boolean isEmpty ( )
Retoma true si la lista está vacía; retona false si
no.
E get ( int index) Retorna el elemento de la posición index de la lista.
Método Descripción
Operaciones de eliminación sobre la lista
void clear () Elimina todos los elementos de la lista.
E remove ( int index)
Elimina el elemento de la posición index de la lista.
Retorna el valor que precisamente fue eliminado.
boolean remover (Object obj)
Elimina la primera aparición del objeto obj dentro
de la lista. En caso de que el objeto obj no
aparezca, no se hace nada. En caso de que el objeto
obj aparezca más de una vez, sólo se elimina su
primera aparición.
Retorna true si la lista fue modificada por la
operación; retorna false si no.
boolean removeALL (Collection<?> coll)
Elimina de la lista todos los elementos que
aparezcan dentro de la colección coll.
Retorna true si la lista fue modificada por la
operación; retorna false si no.
boolean retainALL (Collection<?> coll)
Retiene en la lista sólo los elementos que
aparezcan dentro de la colección coll. En otras
palabras, elimina de la lista todos los elementos
que no aparezcan dentro de la colección coll.
Retorna true si la lista fue modificada por la
operación; retorna false si no.
Métodos que entregan iteradores sobre la lista
Iteratoz
Retorna un iterador capaz de visitar todos los
elementos de la lista.
ListIterator
Retorna un iterador capaz de visitar todos los
elementos de la lista.
ListIterator
Retorna un iterador capaz de visitar los elementos
de la lista, iniciando en la posición index.
Fuente : Sotelo (s.f.)
Método Descripción
Métodos que entregan un arreglo con el contenido de la lista
Object [] toArray ()
Retorna un arreglo de obj contiendo todos
los elementos de la lista.
Retorna un arreglo de objetos contiendo todos
los elementos de la lista. Si el tamaño del
arreglo array es mayor o igual que el tamaño
de la lista, se usa array para guardar los
elementos de la lista.
Métodos de comparación
boolean equals (Object obj)
Retorna true si obj es una lista igual a esta
lista; retorna false si no.
Métodos de hashing
int hashCode ()
Dejaremos la descripción de este método hasta
cuando estemos estudiando Tablas de Hashing.
Métodos que entregan vista de la lista
List
Retorna la sublista de esta lista que va desde la
posición fromlndex hasta la posición to:ndex-
original, es decir, cualquier modificación sobre
la sublista retornada también tiene efecto
sobre la lista original.
¿Sabía que...?
Por otro lado, toda variable cuyo tipo sea una clase (String, Persona,
ArrayList, etc.) se administra por referencia, es decir, se trata como
un apuntador que referencia a un objeto, almacenando la dirección en
memoria donde este se encuentra.
Figura 4. Las variables cuyo tipo es una clase se administran por referencia
Fuente : Sotelo (s.f.)
Figura 5. La constante null como apuntador a la nada
Fuente : Sotelo (s.f.)
En Java, existe un proceso muy importante que se llama el Recolector
de Basura (en inglés: Garbage Collector), cuyo propósito consiste en
liberar la memoria ocupada por aquellos objetos que se han dejado de
referenciar por un programa.
¿Sabía que...?
El Recolector de Basura se ejecuta cada vez que el uso de
memoria sobrepase cierto umbral de porcentaje, o cada vez que la
implementación de la máquina virtual lo decida. Por esta razón, no
nos debemos preocupar en Java por liberar explícitamente la memoria
reservada: apenas dejemos de referenciar uno o más objetos, éstos se
convierten en basura, cuya memoria será liberada por el Recolector de
Basura cuando se ejecute la próxima vez.
6.2. Implementación con vectores
La clase VEDArrayList
la estructura interna de la clase ArrayList
arreglos de tamaño variable, puesto que todos los arreglos en Java tienen una longitud fija después de
haber sido creados, entonces, ¿qué se puede hacer? La respuesta es sencilla: cada vez que se necesite
cambiar el tamaño del arreglo, se crea uno nuevo del tamaño deseado, se pasa el contenido del
arreglo viejo al arreglo nuevo, se desecha el arreglo viejo y se toma únicamente con el arreglo nuevo.
Este truco permite simular en Java arreglos dinámicos de tamaño variable.
Figura 6. Representación de la lista 〈x
0
, x
1
, x
2
, … ,x
n-
〉 como un arreglo dinámico de tamaño variable
Fuente : Sotelo (s.f.)
6.2.1. Constructor
El método constructor de la clase (figura 8), que se responsabiliza de crear una nueva lista vacía,
no debe realizar ninguna operación adicional porque con la inicialización de los atributos ya se está
representando una lista vacía: el atributo arreglo se inicializó con un arreglo de capacidad 1, y el
atributo tamanho se inicializó en 0. No importa la capacidad inicial del arreglo porque a medida que se
vayan realizando inserciones sobre la lista, se va ajustando su capacidad.
Figura 8. Método constructor de la clase VEDArrayList
Fuente : Sotelo (s.f.)
La tabla 5, presenta los análisis de complejidad temporal del método constructor para el mejor y el peor caso.
Tabla 5. Análisis de complejidad del método constructor VEDArrayList(). Modificado de Sotelo (s.f)
Tipo de análisis Complejidad Justificación
Peor caso 0 (1) En todo caso, el atributo arreglo se inicializa
con un arreglo de capacidad 1 y el
atributo tamanho se inicializa en 0, dando
una complejidad temporal de O (1)
por ser un número constante de operaciones.
Mejor caso 0 (1)
Fuente : elaboración propia
6.2.2. Destructor
Para eliminar todos los elementos de la lista existe el método clear, cuya implementación debe
asignarles a todas las casillas ocupadas del arreglo el valor null y debe ponerle el valor 0 al atributo
tamanho. De esta manera, se dejan de referenciar los objetos de la lista, marcándolos como basura
y dejándole el trabajo de la liberación de memoria al Recolector de Basura. La figura 9 representa el
método destructor.
Figura 9. Método que elimina todos los elementos de la lista
Fuente : Sotelo (s.f.)
La tabla 6 presenta los análisis de complejidad temporal del método destructor para el mejor y el peor caso.
Tabla 6. Análisis de complejidad temporal del método void clear (). Modificado de Sotelo (s.f)
Tipo de análisis Complejidad Justificación
Peor caso 0 (n)
En todo caso, se debe asignar el valor null
alas n casillas ocupadas del arreglo
para poder liberar la memoria. Mejor caso 0 (n)
Fuente : elaboración propia