Saturday, April 17, 2010

MANTENIMIENTO EN MEMORIA CON: HashMap

Que tal, en esta oportunidad mostraré una forma muy facil para poder trabajar en memoria y hacer los 'CRUDs' respectivos 'todo en 'MEMORIA'. El ejemplo mostrado consiste en un POJO administrado por un Objeto 'HashMap' que posee un Key (Identidicador) y un objeto 'Alumno' que representará a cada registros que se haga en el 'HashMap', ya que dicho 'HashMap' se trabaja como si fuera una 'Tabla de BD'. Aqui los siguientes métodos útiles que la clase posee para su facilidad y manipulación de objetos:

- registrarAlumno.
- eliminarObjetoEnMemoria.
- buscarObjetoEnTabla.
- buscarExisteObjetoEnTabla.
- getListaKeysFromObjeto.
- getListaKeysFromHashMap.
- imprimirObjetosHashMap.


El ejemplo es el siguiente:

CLASE: Alumno:
/**
* @author Cesar Ricardo.
* @clase: Alumno.java
* @descripción descripción de la clase.
* @author_web: http://frameworksjava2008.blogspot.com
http://viviendoconjavaynomoririntentandolo.blogspot.com
* @author_email: nombre del email del autor.
* @author_company: nombre de la compañía del autor.
* @fecha_de_creación: dd-mm-yyyy.
* @fecha_de_ultima_actualización: dd-mm-yyyy.
* @versión 1.0
*/
public class Alumno{

private int codigo;
private String nombres;
private String apellidos;
private String edad;


//Constructores ...
public Alumno(){
}

public Alumno( Alumno objAlumno ){
this.codigo = objAlumno.getCodigo();
this.nombres = objAlumno.getNombres();
this.apellidos = objAlumno.getApellidos();
this.edad = objAlumno.getEdad();
}

public Alumno( int codigo, String nombres, String apellidos, String edad ){
this.codigo = codigo;
this.nombres = nombres;
this.apellidos = apellidos;
this.edad = edad;
}

public int getCodigo(){
return codigo;
}

public void setCodigo( int codigo ){
this.codigo = codigo;
}

public String getNombres(){
return nombres;
}

public void setNombres( String nombres ){
this.nombres = nombres;
}

public String getApellidos(){
return apellidos;
}

public void setApellidos( String apellidos ){
this.apellidos = apellidos;
}

public String getEdad(){
return edad;
}

public void setEdad( String edad ){
this.edad = edad;
}

}

CLASE: ManejoHashMap:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

/**
* @author Cesar Ricardo.
* @clase: ManejoHashMap.java
* @descripción descripción de la clase.
* @author_web: http://frameworksjava2008.blogspot.com
http://viviendoconjavaynomoririntentandolo.blogspot.com
* @author_email: nombre del email del autor.
* @author_company: nombre de la compañía del autor.
* @fecha_de_creación: dd-mm-yyyy.
* @fecha_de_ultima_actualización: dd-mm-yyyy.
* @versión 1.0
*/
public class ManejoHashMap{

private static Map tablaDataAlumnos;
private static int codigoCorrelativoTabla = 0;
private static final String SIGLA_CODIGO = "USU000";

{
this.tablaDataAlumnos = new HashMap();
}

//Constructor ...
public ManejoHashMap(){
}

/**
* main
* @param argumentos
*/
public static void main( String[] argumentos ){

ManejoHashMap tablaBD = new ManejoHashMap();

Alumno objAlumno_01 = new Alumno( 1, "Cesar Ricardo", "Guerra Arnaiz", "27" );
Alumno objAlumno_02 = new Alumno( 2, "Catherine Magaly", "Cotrina Vasquez", "25" );
Alumno objAlumno_03 = new Alumno( 3, "Milko Guiovany", "Samamé Hipolito", "36" );

//REGISTRANDO OBJETOS.
tablaBD.registrarAlumno( objAlumno_01 );
tablaBD.registrarAlumno( objAlumno_02 );
tablaBD.registrarAlumno( objAlumno_03 );

tablaBD.imprimirObjetosHashMap(); //Imprime resultados.

//IMPRIMIR KEYS DEL 'HASHMAP'
System.out.println( "" );
List listaKeysHashMap = tablaBD.getListaKeysFromHashMap( tablaDataAlumnos );
System.out.println( "NUMERO KEYS: " + listaKeysHashMap.size() );
System.out.println( "KEYS: " + listaKeysHashMap );

//ELIMINAR OBJETOS REGISTRADOS.
System.out.println( "" );
Alumno objAlumnoEliminar = new Alumno();
objAlumnoEliminar.setCodigo( 1 ); //Seteo de codigo identificador del Objeto.

tablaBD.eliminarObjetoEnMemoria( objAlumnoEliminar );
tablaBD.imprimirObjetosHashMap(); //Imprime resultados.
}

/**
* registrarAlumno
* @param objAlumno
* @return boolean
*/
public boolean registrarAlumno( Alumno objAlumnoParam ){
System.out.println( "********** DENTRO DE 'registrarAlumno' ************ " );

boolean estado = false;
boolean existe = false;

try{
if( objAlumnoParam != null ){

existe = this.buscarExisteObjetoEnTabla( objAlumnoParam );

if( existe == false ){
System.out.println( "NO EXISTE ...!!" );

Alumno objAlumno = new Alumno();

this.codigoCorrelativoTabla ++;

//Seteando ...
objAlumno.setCodigo( objAlumnoParam.getCodigo() );
objAlumno.setNombres( objAlumnoParam.getNombres() );
objAlumno.setApellidos( objAlumnoParam.getApellidos() );
objAlumno.setEdad( objAlumnoParam.getEdad() );

//Agregando ...
this.tablaDataAlumnos.put( SIGLA_CODIGO + codigoCorrelativoTabla, objAlumno );

System.out.println( "OBJETO REGISTRADO ...!!" );

estado = true;
}
else{
System.out.println( "NO EXISTE ...!!" );

estado = false;
}
}
else{
estado = false;
}
}
catch( Exception e ){
e.printStackTrace();
estado = false;
}

return estado;
}

/**
* eliminarObjetoEnMemoria
* @param objAlumnoParam
* @return boolean
*/
public boolean eliminarObjetoEnMemoria( Alumno objAlumnoParam ){
System.out.println( "********** DENTRO DE 'eliminarObjetoEnMemoria' ************ " );

boolean existeRegistro = false;
boolean estado = false;

try{
if( objAlumnoParam != null ){

existeRegistro = this.buscarExisteObjetoEnTabla( objAlumnoParam );

System.out.println( "EXISTE REGISTRO: " + existeRegistro );

//SI ES == 'TRUE', EXISTE EN TABLA Y SE PUEDE ELIMINAR.
if( existeRegistro == true ){

List listaKeysObjeto = this.getListaKeysFromObjeto( tablaDataAlumnos, objAlumnoParam );

String codigoKey = null;
Object objRegistro = null;

//Si tiene algun registros.
if( listaKeysObjeto.size() > 0 ){
codigoKey = listaKeysObjeto.get( 0 ); //Obtiene su KEY del Objeto. //USU00XXX
System.out.println( "KEY 'ELIMINAR': " + codigoKey );
objRegistro = this.tablaDataAlumnos.remove( codigoKey );
}

if( objRegistro != null ){
System.out.println( objRegistro + " Codigo del Objeto Removido ...!!");
}

estado = true;
}
else{
estado = false;
}
}
}
catch( Exception e ){
e.printStackTrace();
estado = false;
}

return estado;
}

/**
* buscarObjetoEnTabla
* @param objAlumnoParam
* @return Alumno
*/
public Alumno buscarObjetoEnTabla( Alumno objAlumnoParam ){
System.out.println( "-------- DENTRO DE 'buscarObjetoEnTabla' --------" );

boolean existe = false;

List listaKeysObjeto = this.getListaKeysFromObjeto( this.tablaDataAlumnos, objAlumnoParam );

String codigoKey = null;
Object objRegistro = null;
Alumno objReturn = null;

//Si tiene algun registros.
if( listaKeysObjeto.size() > 0 ){

codigoKey = listaKeysObjeto.get( 0 ); //Obtiene su KEY del Objeto. //USU00XXX
objRegistro = this.tablaDataAlumnos.get( codigoKey );
}

if( objRegistro != null ){
objReturn = (Alumno)objRegistro;
existe = true;
}
else{
existe = false;
}

return objReturn;
}

/**
* buscarExisteObjetoEnTabla
* @param objAlumnoParam
* @return boolean
*/
public boolean buscarExisteObjetoEnTabla( Alumno objAlumnoParam ){
System.out.println( "-------- DENTRO DE 'buscarExisteObjetoEnTabla' --------" );

boolean existe = false;

List listaKeysObjeto = this.getListaKeysFromObjeto( this.tablaDataAlumnos, objAlumnoParam );

String codigoKey = null;
Object objRegistro = null;

//Si tiene algun registros.
if( listaKeysObjeto.size() > 0 ){

codigoKey = listaKeysObjeto.get( 0 ); //Obtiene su KEY del Objeto. //USU00XXX
objRegistro = this.tablaDataAlumnos.get( codigoKey );
}

if( objRegistro != null ){
existe = true;
}
else{
existe = false;
}

return existe;
}

/**
* getListaKeysFromObjeto
* @param tablaAlumnos
* @param objAlumnoParam
* @return List
*/
public List getListaKeysFromObjeto( Map tablaAlumnosParam, Alumno objAlumnoParam ){

List listaKey = new ArrayList();

//System.out.println( this.tablaDataAlumnos.keySet() );

//Iterando ...
for( String keyAlumno : tablaAlumnosParam.keySet() ){

//System.out.println( keyAlumno );

Alumno objAlumno = tablaAlumnosParam.get( keyAlumno );

if( objAlumno.getCodigo() == objAlumnoParam.getCodigo() ){
listaKey.add( keyAlumno.toString() );
}
}

return listaKey;
}

/**
* getListaKeysFromHashMap
* @param tablaAlumnosParam
* @return List
*/
public List getListaKeysFromHashMap( Map tablaAlumnosParam ){

List listaKeys = new ArrayList();

//System.out.println( tablaAlumnos.keySet() );

//Iterando ...
for( String keyAlumno : tablaAlumnosParam.keySet() ){

//System.out.println( keyAlumno );

listaKeys.add( keyAlumno );
}

return listaKeys;
}

/**
* imprimirObjetosHashMap La impresión se dá en base a un ordenaminento NATURAL.
*/
public void imprimirObjetosHashMap(){
System.out.println( "-------- DENTRO DE 'imprimirObjetosHashMap' --------" );

System.out.println ( "TAMAÑO DE REGISTROS EN 'HASHMAP': " + this.tablaDataAlumnos.size() );

Iterator iterador = this.tablaDataAlumnos.entrySet().iterator();

System.out.println( "-------- DATA TABLA CARGADA --------" );

for( ;iterador.hasNext(); ){
Map.Entry llave = ( Map.Entry)iterador.next();
Alumno objAlumno = (Alumno)llave.getValue();

System.out.println( "- KEY: " + llave.getKey() + " | " +
"- DATA: " + objAlumno.hashCode() + " "
+ objAlumno.getCodigo() + " "
+ objAlumno.getNombres() + " "
+ objAlumno.getApellidos() + " "
+ objAlumno.getEdad() );
}
}

/**
* getTablaDataAlumnos
* @return HashMap
*/
public static Map getTablaDataAlumnos(){
return tablaDataAlumnos;
}
}

La impresión obtenida en consola al ejecutar las clase 'ManejoHashMap' es el siguiente:

********** DENTRO DE 'registrarAlumno' ************
-------- DENTRO DE 'buscarExisteObjetoEnTabla' --------
NO EXISTE ...!!
OBJETO REGISTRADO ...!!
********** DENTRO DE 'registrarAlumno' ************
-------- DENTRO DE 'buscarExisteObjetoEnTabla' --------
NO EXISTE ...!!
OBJETO REGISTRADO ...!!
********** DENTRO DE 'registrarAlumno' ************
-------- DENTRO DE 'buscarExisteObjetoEnTabla' --------
NO EXISTE ...!!
OBJETO REGISTRADO ...!!
-------- DENTRO DE 'imprimirObjetosHashMap' --------
TAMAÑO DE REGISTROS EN 'HASHMAP': 3
-------- DATA TABLA CARGADA --------
- KEY: USU0001 | - DATA: 11394033 1 Cesar Ricardo Guerra Arnaiz 27
- KEY: USU0002 | - DATA: 4384790 2 Catherine Magaly Cotrina Vasquez 25
- KEY: USU0003 | - DATA: 9634993 3 Milko Guiovany Samamé Hipolito 36

NUMERO KEYS: 3
KEYS: [USU0001, USU0002, USU0003]

********** DENTRO DE 'eliminarObjetoEnMemoria' ************
-------- DENTRO DE 'buscarExisteObjetoEnTabla' --------
EXISTE REGISTRO: true
KEY 'ELIMINAR': USU0001
org.java.map.Alumno@addbf1 Codigo del Objeto Removido ...!!
-------- DENTRO DE 'imprimirObjetosHashMap' --------
TAMAÑO DE REGISTROS EN 'HASHMAP': 2
-------- DATA TABLA CARGADA --------
- KEY: USU0002 | - DATA: 4384790 2 Catherine Magaly Cotrina Vasquez 25
- KEY: USU0003 | - DATA: 9634993 3 Milko Guiovany Samamé Hipolito 36

Para descarga del demo completo pulsar AQUÍ.

No comments: