Fuente del artículo: Internet Autor: PaleSting/CSDN
En este artículo, veremos los tipos de datos en Java, pero introduciremos el concepto de tipos de datos abstractos (ADT). También aprenderemos sobre algunas de las ADT definidas por Java presentando el marco de colecciones de Java.
TDA
Un ADT se define únicamente por el tipo de datos que contiene y las operaciones que se pueden realizar con este tipo de datos. Los desarrolladores solo pueden acceder a las propiedades de ADT a través de los métodos de operación de ADT y no sabrán cómo se implementan las diversas operaciones dentro de este tipo de datos.
En Java, a menudo usamos una interfaz para proporcionar un conjunto de operaciones sin revelar los detalles de la implementación de estas operaciones. Recuerde que una interfaz define un conjunto de métodos y una clase Java debe implementar este conjunto para satisfacer sus condiciones obligatorias o implementar una instancia de la interfaz.
Mesas lineales, pilas y colas.
Cuando hablamos de ADT, a menudo hablamos de listas lineales, pilas y colas. No discutiremos los detalles de estas estructuras de datos, pero discutiremos por qué se llaman ADT.
Una lista lineal es una colección de elementos finitos dispuestos de forma lineal y que brindan acceso directo a sus elementos. Una pila es una lista lineal ordenada de último en entrar, primero en salir (LIFO). Los elementos se agregan y eliminan del encabezado de la pila. Una cola es una lista lineal ordenada por orden de entrada, los elementos se agregan desde el final de la cola y se toman del principio de la cola.
Las estructuras internas de listas, pilas y colas lineales se pueden implementar de muchas maneras. Por ejemplo, podríamos usar una matriz ordenada o una lista vinculada para implementar cada estructura. El punto clave es que no importa cómo implementes su estructura interna, su interfaz externa siempre será la misma. Esto le permite modificar o actualizar la implementación subyacente sin cambiar la interfaz pública.
Arquitectura de colección Java
El kit de desarrollo de software (SDK) Java 2 proporciona nuevas clases para admitir los ADT más utilizados. Estas clases se denominan clases de colección de Java (similares a las clases de colección de MFC) y trabajan juntas para formar la arquitectura de colección de Java. Esta arquitectura de colección proporciona un conjunto de interfaces y clases que representan datos como los llamados datos abstractos de colección.
La interfaz java.util.Collection se utiliza para representar cualquier grupo de objetos, es decir, elementos. Esta interfaz proporciona operaciones básicas como agregar, eliminar y consultar. La interfaz de Colección también proporciona un método iterador. El método iterador devuelve una instancia de la interfaz java.util.Iterator. La interfaz Iterator proporciona los métodos hasNext, next y remove. Utilizando los métodos proporcionados por la interfaz Iterator, puede recorrer las instancias de un objeto Collection de principio a fin y eliminar de forma segura el elemento representado por el iterador (cursor).
java.util.AbstractCollection es la base de todas las clases de arquitectura de colecciones. La clase AbstractCollection proporciona implementaciones de todos los métodos en la interfaz java.util.Collection excepto los métodos iterador y tamaño. Estos dos métodos de excepción los implementan todas las subclases que heredan java.util.AbstractCollection.
Una clase que implementa una interfaz debe proporcionar la implementación de todos los métodos de la interfaz. Debido a que algunos métodos de interfaz en la arquitectura de la colección son opcionales, debe haber una manera de notificar a la persona que llama que un determinado método no está implementado. Cuando se implementa un método opcional y este método no se implementa, se genera una excepción UnsupportedOperationException. La clase UnsupportedOperationException hereda la clase RuntimeException. Esto permite a la persona que llama llamar a todas las operaciones de recopilación sin colocar cada llamada en un par try-catch.
Listar tabla lineal
La interfaz Lista hereda la interfaz Colección y define una colección ordenada que permite que existan elementos idénticos. La interfaz Lista también agrega métodos que utilizan un valor de índice numérico para operar con los elementos de la Colección según la posición del elemento en la lista lineal. Estas operaciones incluyen agregar, obtener, configurar y eliminar.
La interfaz List también proporciona el método listIterator. Este método devuelve una instancia de la interfaz java.util.ListIterator, que le permite recorrer una lista lineal de principio a fin o de un extremo a otro. java.util.ListIterator hereda la interfaz java.util.Iterator. Por lo tanto, admite la adición y modificación de elementos en la Colección que representa.
El siguiente ejemplo demuestra cómo recorrer los elementos de una lista de atrás hacia adelante. Para lograr esto, ListIterator debe ubicarse después del último elemento de la lista antes de que comience el recorrido.
ListIterator iter = aList.listIterator(aList.size());
mientras (iter.hasPrevious())
System.out.println(iter.previous().toString());
}
La arquitectura de la colección proporciona dos implementaciones de la interfaz List: LinkedList (lista vinculada) y ArrayList (lista de matriz, es decir, lista estática). Ambas implementaciones admiten el acceso aleatorio a sus elementos. Una instancia de ArrayList admite operaciones de estilo de matriz y operaciones de cambio de tamaño de matriz. Una instancia de LinkedList proporciona soporte explícito para agregar, eliminar y proporcionar elementos al principio y al final de la lista. Usando estos nuevos métodos, un programador puede simplemente usar una LinedList como una pila o cola, de la siguiente manera:
LinkedList aQueue = nueva LinkedList(aCollection);
aQueue.addFirst(nuevoElemento);
Objeto anElement = aQueue.removeLast();
LinkedList aStack = nueva LinkedList(aCollection);
aStack.addFirst(nuevoElemento);
Objeto anElement= aStack.removeFirst();
El fragmento de código de la Tabla A demuestra algunas operaciones comunes en instancias de implementación de la interfaz java.util.List utilizando java.util.ArrayList y java.util.LinkedList. Estas operaciones incluyen agregar elementos, acceder aleatoriamente a elementos y eliminar explícitamente elementos del final de la lista.
Saber qué está pasando y no saber por qué es de gran beneficio
ADT proporciona una poderosa herramienta para separar las operaciones en la interfaz pública de un objeto de su implementación concreta. Esto permite que una implementación de ADT cambie y evolucione manteniendo su interfaz pública sin cambios. La arquitectura de colección de Java proporciona una gran cantidad de interfaces e implementaciones que representan colecciones de elementos básicos y pueden usarse para crear ADT útiles.