Java

Desarrollo en Java.

String, StringBuilder y StringBuffer en Java

Los objetos String son inmutables, esto puede suponer una gran diferencia con respecto a StringBuilder y StringBuffer que si que son mutables. Cuando trabajas con Strings nunca se muta el objeto original, se crea un objeto nuevo y cambia la referencia de memoria de la variable a ese nuevo objeto. El objeto original queda sin referencia a ninguna variable y el recolector de basura de java se encarga de destruirlo. Esto cuando se trata de trabajar con muchos nuevos objetos puede provocar un retardo en la ejecución del proceso.

Con StringBuilder o StringBuffer esto no sucede porque son objetos mutables, es decir, no se crea un nuevo objeto cada vez que manipulamos la cadena guardada en StringBuilder o StringBuffer, por tanto tampoco cambia la referencia al espacio de memoria asignado a la variable de la cadena.

Ejemplo:

String saludo = "Hola";
saludo = saludo + " Luis";

Con String saludo = “Hola”; estamos creando la variable saludo que crea un objeto y apunta a una posición de memoria.

Con saludo = saludo + “ Luis”; estamos concatenamos el nombre de Luis a lo que contiene la variable saludo, en este caso Hola, pero esto no esta modificando el valor de la variable saludo sino está creando un nuevo objeto que va a guardar dicha concatenación y va a apuntar a la posición de memoria de la variable saludo. Ahora el objeto anterior que guarda la cadena Hola ha quedado sin referencia a ninguna posición de memoria, no lo vamos a usar nunca más pero hasta que el recolector de basura de java lo elimine, va a seguir consumiendo recursos innecesarios.

Por el contrario con StringBuilder o StringBuffer esto no pasa, solo se modifica el objeto original y siempre apunta a la misma posición de memoria.

Ejemplo:

StringBuilder saludo = new StringBuilder("Hola");
saludo.append(" Luis");

StringBuilder y StringBuffer son casi iguales. StringBuffer puede ser usado en programas concurrentes, lo que se conoce como “thread safe”. Esto hace que StringBuilder sea más eficiente en programas no concurrentes.

Por tanto, si vamos a trabajar intensamente con cadenas, es mucho mejor utilizar StringBuilder y StringBuffer en lugar de String.

Mock y Stub, pincelada de prueba unitaria

Viendo las dos primeras partes TDD Kata Markdown de Lean Mind me surgen dudas de conceptos que aún desconozco y buscando información, he decidido hacer un pequeño resumen de los conceptos y citar la fuente con el texto completo con ejemplos para una mejor comprensión.

Los Mocks, “son objetos preprogramados con expectativas que conforman la especificación de lo que se espera que reciban las llamadas”, es decir, son objetos que se usan para probar que se realizan correctamente llamadas a otros métodos, por ejemplo, a una web API, por lo que se utilizan para verificar el comportamiento de los objetos.

Los Stubs, “proporcionan respuestas predefinidas a ciertas llamadas durante los test, sin responder a otra cosa para la que no hayan sido programados”, es decir, los stubs son configurados para que devuelvan valores que se ajusten a lo que la prueba unitaria quiere probar, por lo que se utilizan para verificar el estado de los objetos.

Fuente: Blog de ITBLOGSOGETI

Enlace al Blog https://itblogsogeti.com/2015/03/26/desarrollo-pruebas-unitarias-trinitario-gomez-sogeti/

Arrays asociativos – Java

Hashtable

Una Hashtable es una estructura Java de tipo diccionario que nos permite almacenar elementos identificadospor pares clave/valor.

La estructura Hashtable está definida dentro del paquete  java.util por tanto hay que importar el paquete.

import java.util.Hashtable;

El constructor de Hashtable.

Hastable<String,String> paises = new = Hastable<String,String> ();

Para añadir elementos se usa el método .put(clave,valor).

paises.put("ES","España");

Para recuperar elementos usamos el método .get(clave).

System.out.println(paises.get("ES"));

Eliminar elementos con el método .remove(clave).

paises.remove("ES");

Para comprobar si una clave existe en el array asociativo se usa el método .containsKey(clave) y retorna true o false.

paises.containsKey("ES");

Para comprobar si un valor existe en el array asociativo se usa el método .contains(valor) y retorna true o false.

paises.contains("España");

Recorrer el array asociativo se hace con el método keys() y retorna un objeto de la clase Enumeration con todas las claves.

claves = paises.keys();

while (claves.hasMoreElements()){

Object clave = claves.NextElement();

Object valor = capitales.get(clave);

System.out.println("Pais " + clave.toString() + " Capital " + valor.toString());

{

También está el método .elements() que devuelve u objeto de la clase Enumeration con todos los valores del array asociativo y el método .values() que devuelve un objeto de la clase Collection con todos los valores del array asociativo.

Recorrer de forma ordenada el array asociativo se hace con el método keySet() y retorna un objeto de la clase Set con todas las claves. Para recorrer el objeto Set de forma ordenada lo convertimos a un array y lo ordenamos con el método .sort().

String[] claves = (String[]) capitales.keySet().toArray(new String[0]);

java.util.Arrays.sort(claves);

for (String clave : claves) {

System.out.println(clave + " : " + capitales.get(clave));

{

Enlace a más métodos de la clase Hashtable: http://w3api.com/Java/Hashtable/