miércoles, 12 de junio de 2013

Clase StringBuffer y Clase StringBuilder

Buenas amigos, en este nuevo tema vamos a tratar con las clases StringBuffer y StringBuilder. Anteriormente , en el tema de la Clase String, hablábamos de que es inmutable, es decir, no cambia. Estas dos clases en cambio, si son mutables, es decir, podemos modificar su sección de memoria sin que deje de apuntar al mismo. Veamoslo.

Bien, sabemos (o deberíamos saber) que un objeto de tipo String es inmutable, es decir, cuando lo creamos apunta a una sección de memoria, y cuando le concatenamos otra cadena, deja de apuntar a esa sección de memoria para apuntar a una nueva donde tendrá la nueva cadena, dejando la anterior para el "recolector de basura" (Garbage Collector).

Como veis, s apunta a "Hola", posteriormente le concatenamos la cadena "Mundo", con lo que s deja de apuntar a "Hola" y pasa a apuntar a "Hola Mundo". Es inmutable, se destruye el anterior y se crea uno nuevo, no puede cambiar.

Esto para la clase String, pero ahora tenemos 2 nuevas clases que si son mutables, pueden cambiar sin dejar de apuntar a la misma sección de memoria.


Como podéis observar, al concatenar el mismo tipo de texto, ya no deja de apuntar a su sección de memoria, si no que la amplía.

StringBuffer y StringBuilder son prácticamente iguales, la única diferencia es que StringBuffer es sincronizado y StringBuilder no,  con lo cual a la hora de hacerlas funcionar, StringBuilder es más rápida al iterar, pero StringBuffer es más seguro.

Los constructores más utilizados por estas clases son:
      • StringBuffer sb=new StringBuffer();
      • StringBuffer sb=new StringBuffer(String cad);

      • StringBuilder sbd=new StringBuilder();
      • StringBuilder sbd=new StringBuilder(String cad);
Bueno, para los métodos voy a utilizar la clase StringBuffer, pero es igual para ambas:
  • StringBuffer append(Strring cad): Método que concatena la cadena pasada por argumentos con la cadena de StringBuffer. IMPORTANTE: Este método esta sobrecargado, pudiendo pasar a cadena casi cualquier tipo de objeto(que pueda ser pasado a cadena), int, float, object, char....No los voy a poner, porque son muchos, y es todo lo mismo, podéis verlos aquí.
    • sb.append("hola");
  • int capacity(): Método que devuelve la capacidad actual.
    • int n=sb.capacity();
  • char charAt(int n): Método que devuelve el carácter de la posición ingresada por argumento. Recordamos que las cadenas comienzan a contar desde la posición 0.
    • char c=sb.charAt(2) ;
  • int codePointAt(int n): Método que devuelve el valor UNICODE del carácter situado en la posición pasada por argumentos.
    • int n=sb.codePointAt(2);
  • StringBuffer delete(int inicio, int final): Método que elimina la cadena resultante desde la posición inicial hasta la final.
    • sb.delete(3,7);
  • StringBuffer deleteCharAt(int n): Método que elimina el carácter de la posición pasada por argumentos.
    • sb.deleteCharAt(2);
  • int indexOf(String cad): Método que devuelve el indice donde comienza la subcadena pasada por argumentos.
    • int n=sb.indexOf("Mun");
  • StringBuffer insert(int pos, char c): Método que inserta en la posición pasada por el primer argumento, el carácter pasado en el segundo argumento. IMPORTANTE: Como anteriormente nos pasaba con append(), este método esta sobrecargado para poder insertar todo tipo de datos, primitivos, booleanos, String....Pasaos por la API para verlos todos.
    • sb.insert(2, 'c');
  • int length(): Método que devuelve el número de caracteres que tiene nuestra cadena.
    • int n=sb.length();
  • StringBuffer replace(int inicio, int final, String cadena): Método que reemplaza la cadena desde la posición pasada por el primer argumento hasta la posición pasada por el segundo argumento, reemplazándolo por la cadena pasada por tercer argumento.
    • sb.replace(3,7, "lalala");
  • StringBuffer reverse(): Método que invierte el orden de los caracteres.
    • sb.reverse();
Bueno, estos son los más usados, pero no los únicos, podéis verlos en la API.

Bien, como ya dijimos, son iguales para StringBuilder, así que no voy a darle más vueltas. Espero que os sirva.

Un saludo

No hay comentarios:

Publicar un comentario