Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Listas en Lenguaje Java: Conceptos Básicos y Operaciones, Ejercicios de Programación Java

ejercicios, evaluacion,. trabajo, colaborativo

Tipo: Ejercicios

2019/2020

Subido el 07/10/2020

yefred
yefred 🇨🇴

4.2

(6)

9 documentos

1 / 30

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Palabras clave: estructura lineal, lista, representación, operación.
Contenido
1
2
3
4
5
6
Definición
Conceptos básicos
Listas en lenguaje Java
Implementaciones de listas
Aplicabilidad
Operaciones básicas
Las listas como estructuras de datos
Unidad 2 / Escenario 3
Lectura fundamental
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e

Vista previa parcial del texto

¡Descarga Listas en Lenguaje Java: Conceptos Básicos y Operaciones y más Ejercicios en PDF de Programación Java solo en Docsity!

Palabras clave : estructura lineal, lista, representación, operación.

Contenido

Definición

Conceptos básicos

Listas en lenguaje Java

Implementaciones de listas

Aplicabilidad

Operaciones básicas

Las listas como estructuras de datos

Unidad 2 / Escenario 3

Lectura fundamental

1. Definición

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.

2. Aplicabilidad

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?

〈15, 30, 11, 28 〉 〈15, 30, 11, 28 〉 SI SI SI
〈15, 30, 11, 28 〉 〈27, 30, 11, 28 〉 NO NO NO
NO NO NO
〈11, 11, 15, 15, 11〉 〈15, 30, 11, 28 〉 NO SI NO
NO SI SI
NO NO NO
〈 30, 11, 28 〉 〈15, 30, 11, 28 〉 NO SI SI
NO SI SI
NO SI SI
〈15, 30, 11, 28 〉 〈 〉 NO NO NO
SI SI SI
NO SI NO

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.

4. Operaciones básicas

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. Listas en lenguaje Java

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 es una interfaz de Java que representa una lista de elementos de tipo E

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 representa una lista de números flotantes,

List representa una lista de cadenas de texto, List representa una lista de personas,

List representa una lista de círculos, etc.

5.2. Implementaciones suministradas por Java para la interfaz List

En este documento, se introducen dos implementaciones de Java para la interfaz List:

ArrayList. Implementa listas a través de vectores (arreglos dinámicos de tamaño variable).

La figura 1 muestra una representación gráfica de la forma en que se disponen los datos en

esta implementación.

LinkedList: implementa listas a través de nodos doblemente encadenados en anillo con

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 de Java

Fuente : Sotelo (s.f.)

La interfaz List se encuentra ubicada en el paquete java.util, y su documentación está disponible en el API de Java en la página https://docs.oracle.

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 de Java

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 iterator ( )

Retorna un iterador capaz de visitar todos los

elementos de la lista.

ListIterator listIterator ( )

Retorna un iterador capaz de visitar todos los

elementos de la lista.

ListIterator listIterator ( int index)

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.

T [] toArray (T[] array)

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 subListI ( int fromIndex, int toIndex)

Retorna la sublista de esta lista que va desde la

posición fromlndex hasta la posición to:ndex-

  1. La sublista retornada es una vista de la lista

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.)

La constante null, que representaremos con el símbolo , actúa

en Java como un apuntador a la nada. Asignándole a un apuntador

la constante null, se puede dejar de referenciar el objeto apuntado.

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 implementa listas con arreglos dinámicos de tamaño variable, exhibiendo

la estructura interna de la clase ArrayList de Java. Formalmente hablando, en Java no existen los

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