Implementar un tipo abstracto de dato para trabajar con mapas ordenados (tambin llamados tablas, diccionarios o tablas de bsqueda). En un mapa los elementos se almacenan en parejas, cada una consta de una llave y un valor. Para recuperar el valor es necesario proporcionar la llave y se obtiene el valor asociado a ella. Cada llave identifica una entrada, por lo que debe ser nica. Sin embargo, es posible que dos llaves diferentes tengan el mismo valor. La interface que debe implementar es la siguiente:
public interface TADMapa <L, V> { public boolean estaVacio(); public void limpiar(); public int tamanio(); public V agregar (L llave, V valor); public V obtener (L llave); public void eliminar(L llave); public java.util.Iterator iterador(); public interface TADRegistro <L, V> { public L obtenerLlave(); public V obtenerValor(); public void asignarValor(V valor); } }
En la interface, el mtodo:
estaVacio() : Devuelve true si no hay elementos en el mapa; limpiar(): Limpia el mapa. Este mtodo debe ser de orden O(1). tamanio(): Devuelve el nmero de elementos del mapa. agregar (L llave, V valor): Agrega al mapa un registro devolviendo el valor previo si la llave ya exista en el mapa o bien null si la llave es nueva. obtener (L llave): Devuelve el valor asociado con unallave o bien null si la llave no est en el mapa. eliminar(L llave): Elimina del mapa el registro asociado con la llave proporcionada, si se encuentra en el mapa, de no ser as no hace nada. iterador(): Devuelve un objeto que implementa la interface Iterator. TADRegistro: Es una interface pblica anidada, su tipo es TADMapa.TADRegistro. Este objeto almacena la pareja llave/valor, permitiendo accesar a la llave o al valor y permitiendo cambiar el valor. El iterador que regresa elementos trabaja con los objetos TADRegistro.
import java.util.Iterator; import java.util.NoSuchElementException; public class Mapa <L extends Comparable, V> implements TADMapa<L, V> { private Registro []mapa; private int numElem;
public Mapa() { this(10); }
public Mapa(int t) { if (t > 0) mapa = new Registro[t]; else mapa = new Registro[10]; numElem = 0; }
public Mapa(Mapa m) { mapa = new Registro[m.mapa.length]; for(int i = 0; i < mapa.length; i++) mapa[i] = m.mapa[i]; numElem = m.numElem; }
public Registro next() { if(hasNext()) return mapa[p++]; throw new NoSuchElementException(); }
public void remove() { throw new UnsupportedOperationException(); } }
private class Registro <L, V> implements TADMapa.TADRegistro <L,V> { private L llave; private V valor; public Registro(L llave, V valor) { this.llave = llave; this.valor = valor; }