Este documento describe diferentes estructuras de almacenamiento de datos como arrays, pilas, colas y listas en Java. Explica las operaciones básicas en cada una como insertar, extraer y consultar elementos. También cubre temas como ordenación de arrays mediante interfaces Comparable y Comparator, y el uso de iteradores e interfaces como Collection para recorrer y manipular listas genéricas.
2. Introducción Arrays en Java Operaciones con arrays Operaciones con pilas Operaciones con colas Listas Collection Estructuras de almacenamiento
3. Necesidad de las estructuras de datos Los algoritmos requieren una representación apropiada de los datos para lograr ser eficientes. Esta representación junto con las operaciones permitidas se llama estructura de datos. 1. INTRODUCCIÓN
4. Matrices, pilas y colas Matriz (array), estructura de datos que consta de un número fijo de elementos del mismo tipo. Vectores, matrices unidimensionales. Pila, LIFO (Last In Fisrt Out) estructura de datos en la cual el acceso está limitado al elemento más recientemente insertado. Cola, FIFO (First In First Out) permiteacceder al elemento más antiguo. 1. INTRODUCCIÓN
5. Arrays en java Se definen y utilizan con el operador de indexación corchetes [ ] Es un objeto más, su identificador es una referencia. Arrays dinámicos, cuando llamamos al constructor decidimos el tamaño. length, miembro intrínseco, sólo se puede consultar, indica cuántos elementos hay en el array. Siempre se controlan los rangos 2. ARRAYS EN JAVA
6. Arrays multidimensionales en java Declaración: int [][] Construcción: int [][] matriz= new int [3][4]; Acceso: matriz[2][0] Devolver un array: String[][] conjuntoCadenas() 2. ARRAYS EN JAVA
7. Operaciones con arrays java.util.Arrays, clase que implementa un conjunto de métodos estáticos que permiten realizar operaciones con arrays: equals(), compara la igualdad de dos arrays. fill(), rellena un array con un valor. sort(), ordena un array. binarySearch(), busca un dato en un array ordenado. asList(), convierte el array en un contenedor tipo lista de Java. System.arraycopy(), copia datos de un array en otro, realiza copia superficial. 3. OPERACIONES CON ARRAYS
8. Diseño de la ordenación de arrays Problema de escribir código de ordenación genérico: debemos llevar a cabo comparaciones basadas en el tipo del objeto. Podemos escribir código de ordenación para cada tipo no se puede reutilizar. Algoritmo de ordenación coches: […] if (coche1.cilindrada() > coche2.cilindrada()) […] Algoritmo de ordenación aviones: […] if (avion1.verPasajeros() > avion2.verPasajeros()) […] 3. OPERACIONES CON ARRAYS
9. Diseño de la ordenación de arrays Podemos “separar los elementos que cambian de los que permanecen igual”, el algoritmo general de ordenación permanece igual, lo que cambia es la forma de comparar los objetos. La parte del código que varía la encapsulamos en la propia clase. Algoritmo de ordenación genérico: […] if (Comparable1.comparar(Comparable2)>0) […] 3. OPERACIONES CON ARRAYS
10. Comparación para la ordenación Primera forma de proporcionar esto: La clase a ordenar debe implementar la interfaz java.lang.Comparable. Interfaz con un único método compareTo() Segunda forma: Si tenemos que ordenar una clase que no implementa comparable o no debemos emplear este tipo de comparación. Crear una clase separada que implementa la interfaz Comparator. Se debe implementar el método compare() 3. OPERACIONES CON ARRAYS
11. Operaciones con pilas voidpush(Object x) Inserta un nuevo elemento en la pila, si no está llena Object pop() Devuelve y borra el elemento más recientemente insertado. Object top() Devuelve el elemento más recientemente insertado. booleanestaVacia() Comprueba si la pila está vacía. void vaciar() Vacía la pila. 4. OPERACIONES CON PILAS
12. Operaciones con colas void insertar(Object x) Inserta un nuevo elemento en la cola. Object extraer() Devuelve y borra el elemento más antiguo de la cola. ObjectverPrimero() Devuelve el elemento más antiguo de la cola. booleanestaVacia() Comprueba si la cola está vacía. void vaciar() Vacía la cola. 5. OPERACIONES CON COLAS
13. Cola de prioridad (I) Estructura de datos que permite guardar elementos ordenador de menor a mayor. Acceder rápidamente al elemento menor de una colección y poder extraerlo. ¿Por qué no utilizar un árbol binario de búsqueda? Árboles binarios innecesariamente potentes. Rendimiento pobre en el caso peor. Requieren almacenar dos referencias en cada nodo. 5. OPERACIONES CON COLAS
14. Cola de prioridad (II) void insertar(Comparable x) Inserta un nuevo elemento en la cola. Comparable extraer() Devuelve y borra el elemento menor de la cola. Comparable buscarMin() Devuelve el elemento menor de la cola. booleanestaLlena() Comprueba si la cola está llena. booleanestaVacia() Comprueba si la cola está vacía. void vaciar() Vacía la cola. 5. OPERACIONES CON COLAS
15. Listas Lista, es una colección de elementos de información dispuestos en un cierto orden. El número de elementos no suele estar fijado, ni suele estar limitado por anticipado. Lista enlazada, los elementos se almacenan de forma no contigua, en vez de un vector de posiciones consecutivas. 6. LISTAS
16. Soporte de java para listas En Java se puede trabajar con el concepto colección (Collection): grupo de elementos individuales, a los que se puede aplicar alguna regla. Una lista (List) es un tipo de colección que contiene elementos en una secuencia concreta. Java incluye dos clases que implementan el interfaz List: ArrayList y LinkedList. 6. LISTAS
17. Operaciones de Collection System.out.println(), visualizar colección. add(), añadir un elemento. contains(), comprueba si existe un elemento. isEmpty(), comprueba si está vacío. iterator(), devuelve un iterador. size(), devuelve el número de elementos del contenedor. remove(), elimina un elemento del ontenedor. Clase auxiliar que permite realizar más operaciones: java.util.Collections. 7. COLLECTION
18. Recorrido de una colección utilizando un iterador importjava.util.*; publicclassPruebaIteradorLista { public static void main(String[] args) { List l= new ArrayList(); l.add(new Integer(8)); l.add(new Integer(3)); … l.add(new Integer(1)); Integerent= null; Iterator i= l.iterator(); while (i.hasNext()) { ent= (Integer)i.next(); System.out.println(ent); } } } 7. COLLECTION