sábado, 1 de mayo de 2010

Programación de mapas en Java

Los mapas, son una estructura de pares de atributo clave-valor, son muy útiles para el uso de información estructurada, y vamos a ver un par de ejemplos sencillos, y uno un poco más ocmplejo, donde podemos observar su funcionalidad y sus grandes ventajas.

Lo primero entender como funcionan, es decir, como se recuperan datos de un mapa y como se almacenan datos ne un mapa.

declarar:

Map<String, Objeto> mapa;

inicializar:

map = new TreeMap<String, Objeto>();

introducir datos:

mapa.put("clave",objeto);

Sacar datos:

mapa.get(clave);

Después ver como pueden sernos útiles como memoria cache de una base de detos, que podría ser un uso de los mapas.

Aqui, sería tan sencillo como alamcenar todos los datos de una consulta SQL, recorriendo el ResultSet, algo parecido a esto:

While(rs.next){

//Crear objeto de la consulta.

Objeto x = new Objeto(rs.getString(1), rs.getInt(2), rs.getString(3));

//Introducirlo en el mapa


mapa.put(x.id, x);


}

Así tendriamos almacenado todos los datos de la tabla que hubieramos consultado en el mapa, y para darselos a un cliente o interfaz, podríamos usar el mapa, en vez de consultas a la base de datos, lo que es más rápido que entar a la base de datos para cada cosa que se necesite.

Y por último estructuras complejas, como mapas de listas o mapas de mapas, esto va en honor a Ingeniería del Software.

Declarar:

Map<String, Map<String, Objeto>> DobleMapa;

Inicializar:

DobleMapa = new TreMap<String, Map<String, Objeto>>();

Para meter datos en un objeto de este tipo, hace falta pensar que necesitas introducir un mapa, en cada clave del mapa, lo que parece recursivo, pero no lo es, ejemplo teniendo en cuanta el mapa del anterior punto:

//el mapa introducido es el mapa sencillo de antes que tenia los datos de la base de datos.


DobleMapa.put("Clave", mapa);

De esta manera, tendriamos tantos mapas con información, como tablas hubieramos consultado con objetos del tipo que hayamos selecconado, y los tendriamos estructurados con claves diferentes para cada una de las tablas en las que están almacenados los datos.

Para otro post, mezclar, mapas, y bases de datos con Hibernate, para tener objetos java, que se consultan directamente ala base de daots y además estan almacenados en Mapas. Suena muy friki, pero a ver como queda.