STRINGBUFFER, STRINGBUILDER JAVA. EJEMPLO. DIFERENCIAS ENTRE CLASES. CRITERIOS PARA ELEGIR. MÉTODOS. (CU00914C)

Documentos relacionados
LA CLASE VECTOR DEL API JAVA. MÉTODOS TRIMTOSIZE Y ENSURECAPACITY EJEMPLO Y EJERCICIOS RESUELTOS. (CU00922C)

! 16 bit en vez de los 7 u 8 bits que ofrece ASCII. ! Tipo char. ! Los valores se expresan entre comillas simples: a, 4, # !

Introducción a la Programación VIII. Strings. Carácter. Tabla ASCII. Generación. String 3/16/11. Curso de Programación en Java

INTERFACE LIST. CLASE LINKEDLIST DEL API JAVA. EJERCICIO RESUELTO Y DIFERENCIAS ENTRE ARRAYLIST Y LINKEDLIST (CU00921C)

Para crear un arreglo de cualquier tipo de elementos la sintaxis es:

EJERCICIO Y EJEMPLO RESUELTO: USO DE LA INTERFAZ CLONEABLE DE JAVA. MÉTODO CLONE() PARA CLONAR OBJETOS. (CU00912C)

INTERFACE LIST DEL API JAVA. CLASES ARRAYLIST, LINKEDLIST, STACK, VECTOR. EJEMPLO CON ARRAYLIST. (CU00920C)

Unidad II Tema 3: Tratamiento de arreglos y cadenas en Java

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Programación II 2do cuatrimestre 2017

REPASO ARRAYS O ARREGLOS UNIDIMENSIONALES EN JAVA. EJEMPLOS DE CÓDIGO. (CU00903C)

Conceptos a tratar. Fundamentos de la Programación Orientada a Objetos Ampliación sobre clases y objetos

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA

Tema 2. El lenguaje de programación Java. Arrays y cadenas

INTERFACE COMPARATOR. DIFERENCIAS ENTRE COMPARATOR Y COMPARABLE. CLASE COLLECTIONS. EJERCICIOS RESUELTOS. (CU00918C)

INTERFACES SET Y SORTEDSET DEL API DE JAVA. CLASES HASHSET Y TREESET. EJEMPLO. DIFERENCIAS ENTRE ELLAS. (CU00924C)

Tema 6. Threads: programas multitarea

Arquitecturas cliente/servidor

INTERFACE COLLECTION DE JAVA.UTIL DEL API JAVA. EJERCICIOS Y EJEMPLOS RESUELTOS. MÉTODOS ADD, REMOVE, SIZE. STREAMS (CU00917C)

StringBuffer, Math y Wrapper

LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C)

Informática Lección 5. Arreglos (vectores) Curso Pedro Álvarez y José Ángel Bañares 2/11/2010. Dpto. Informática e Ingeniería de Sistemas.

Arrays, Cadenas y Vectores Tipos Genéricos

Estructura de datos y Programación

Datos Elementales y formato de un programa en Java

SOBREESCRIBIR MÉTODOS EN JAVA: TOSTRING, EQUALS. EJEMPLOS Y EJERCICIOS RESUELTOS. COMPARAR OBJETOS. (CU00694B)

Tema 4. Control de flujo. Programación Programación - Tema 4: Control de Flujo

FACULTAD DE ECONOMIA Y ADMINISTRACION DEPARTAMENTO DE CIENCIAS DE LA COMPUTACION CÁTEDRA PROGRAMACION GENERAL. Trabajo Práctico Nº 4

Secuencias en Python. Introducción a la Computación Clase 11 Patricia Borensztejn

Unidad IV. Este tipo de codificación nos es permitido gracias a la sobrecarga, la cual se aplica a métodos y constructores.

BENEMERITA UNIVERSIDADD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN

Lenguajes de programación. Algoritmos y Estructuras de Datos I. Lenguajes compilados. Lenguajes compilados

CLASE ARRAYS DEL API JAVA. MÉTODOS PARA ARRAYS EQUALS (COMPARAR), COPYOF (COPIAR), FILL (RELLENAR). EJEMPLOS. (CU00676B)

Los parámetros: son los campos que se comunican a los métodos de los objetos.

Docente: Juan Carlos Pérez P. Alumno : Fecha : Nota:

o Los arreglos son colecciones ordenadas de datos del mismo tipo. o Ejemplos: 2

Definición de clase: Una clase es un prototipo que define las variables y los métodos de todos los objetos con características comunes.

Definición de clase: Una clase es un prototipo que define las variables y los métodos de todos los objetos con características comunes.

TIPO Y MÉTODO ITERATOR. ERROR JAVA.UTIL.CONCURRENT MODIFICATIONEXCEPTION. RESUMEN DE TIPOS DE BUCLES EN JAVA. (CU00667B)

! Qué es la POO?! Un paradigma de programación. ! No hay paradigmas mejores ni peores! Todos tienen sus ventajas e inconvenientes

La clase String

Arreglos, colecciones

Ejecución de hebras. En realidad, todas las aplicaciones escritas en Java son aplicaciones multihebra (recuerde el recolector de basura).

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Unidad V. Ya veremos qué poner en "algunas_palabras" y "algo_más", por ahora sigamos un poco más.

Práctica No. 2. Tipos de Datos y Entrada/Salida Estándar

HOJA DE EJERCICIOS 3 HERENCIA ENTRE CLASES Y POLIMORFISMO DE MÉTODOS

ARRAYS O ARREGLOS. EJEMPLOS CON OBJETOS Y TIPOS PRIMITIVOS. CAMPO LENGTH. RESUMEN TIPOS DE COLECCIONES JAVA. (CU00669B)

Sesión 2. TEMA 4. OBJETOS Y CLASES

Arreglos. Un arreglo es un objeto en el que se puede almacenar un conjunto de datos de un mismo tipo.

TIPOS DE DATOS (VARIABLES) EN JAVA. TIPOS PRIMITIVOS (INT, BOOLEAN, ETC.) Y OBJETO (STRING, ARRAY, ETC.) (CU00621B)

INTERFACE ITERATOR DEL API JAVA. MÉTODO REMOVE PARA BORRAR OBJETOS EN COLECCIONES. EJERCICIOS Y EJEMPLO RESUELTO. (CU00919C)

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

ASIGNACIÓN DE IGUALDAD EN JAVA. REFERENCIAS A OBJETOS. DIFERENCIA ENTRE IGUALDAD E IDENTIDAD. (CU00663B)

Normalmente, los programas son ejecutados de forma secuencial. Único flujo de control

Arrays unidimensionales. Dim.Option Base. Erase. Ejemplos en Visual Basic (CU00311A)

Ejercicio de Programación Orientada a Objetos Curso 2016/2017 Exámenes

Introducción a Java. Fernando Cerezal López. 24 Noviembre 2005

Tema 7.- Fundamentos de la Programación Orientada a Objetos

EJERCICIO Y EJEMPLO RESUELTO: USO DE LA INTERFACE COMPARABLE Y MÉTODO COMPARETO DE JAVA. COMPARAR OBJETOS (CU00913C)

Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A.

CLASE DATE DEL API JAVA. MÉTODOS BEFORE, AFTER, TOLOCALESTRING, TOGMTSTRING Y GETTIME. EJEMPLOS. (CU00924C)

Programación Orientada a Objetos. Resumen de Temas Unidad 3: Constructores y destructores

Docente: Juan Carlos Pérez P. Alumno : Fecha : Nota:

Programación Concurrente y Distribuida Ingeniería Informática Facultad de Ciencias Universidad de Cantabria.

Concurso: Cuánto sabes de JAVA?

Capítulo 3. Introducción a la programación. Continuar

c) Explicar qué es un BreakPoint en Netbeans y para qué sirve. 0,5 punto

Threads o Hilos. Un thread en JAVA comienza como una instancia de java.lang.thread antes de convertirse en un hilo de ejecución.

Programación. Arrays. Dr. (c) Noé Alejandro Castro Sánchez

RELACIÒN ENTRE LA PROGRAMACIÒN ORIENTADA A OBJETOS Y LA ESTRUCTURADA

Principios de Computadoras II

Examen de Introducción al Software (Ingeniería Informática)

EL MÉTODO EQUALS EN JAVA. DIFERENCIA ENTRE IGUALDAD E IDENTIDAD. COMPARAR OBJETOS. EJEMPLOS. (CU00662B)

Programación Orientada a Objetos Curso 2014/2015. Práctica 11

Examen de Programación 1. Viernes 31/enero/2014. Problema 1 o (2.5 puntos) Disponer un documento de identificación con fotografía sobre la mesa.

Arrays. Los arreglos son una colección de objetos del mismo tipo los cuales tienen un nombre en común y su acceso es mediante un índice.

Programación en. Unidad 3 Elementos Básicos del Lenguaje

QUÉ ES UNA CLASE JAVA? ATRIBUTOS (PROPIEDADES O CAMPOS), CONSTRUCTOR Y MÉTODOS. (CU00623B)

EJERCICIO Y EJEMPLO RESUELTO: USO DE LA INTERFACE ITERABLE DEL API DE JAVA Y MÉTODO ITERATOR. RECORRER COLECCIONES DE OBJETOS (CU00915C)

a) Reescribir P1 introduciendo un error sintáctico (de compilación), otro de ejecución, y

Definición. Mónica E. García García Feb 07

WHILE Y DO WHILE BREAK EN LENGUAJE C. BUCLES MIENTRAS. FORZAR SALIDA O TERMINACIÓN. EJEMPLO (CU00534F)

Memoria en C++ Punteros - Referencias Clases Y ahora, a trabajar! Memoria Dinámica en C++

Universidad Nacional del Santa FACULTAD DE INGENIERIA E.A.P de Ingeniería de Sistemas e Informática NETBEANS 7.0

Unidad IV Arreglos y estructuras. M.C. Juan Carlos Olivares Rojas

Tema 2: EL TIPO DE DATOS ENTERO. INSTRUCCIÓN DE ASIGNACIÓN Y DE COMPOSICIÓN SECUENCIAL

Estructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa

FUNCIONES DE CADENAS DE CARACTERES (STRINGS) EN PHP. CONCATENACIÓN. STRLEN (LONGITUD) Y SUBSTR (EXTRAER SUBCADENA). (CU00821B)

REPASO ARRAYS MULTIDIMENSIONALES EN JAVA. DECLARACIÓN Y USO. EJEMPLOS Y EJERCICIOS RESUELTOS. (CU00905C)

3.7 Caracteres, String y Otros Tipos de Datos Arreglos Arreglos en Java Ejemplo de un Arreglo public class public static v o i d a r g s int

Programación Orientada a Objetos con Java. Elementos Básicos del Lenguaje Java. Creación de un objeto. Creación de un objeto. Creación de un objeto

En Java, un arreglo es un grupo de variables (llamados elementos o componentes) que contienen valores, todos del mismo tipo.

Guia#9: Punteros en C#.

TEMA 7. ARRAYS (LISTAS Y TABLAS).

Laboratorio I Java Threads (Silberschatz Galvin)

FUNCIONES JAVASCRIPT. CONCEPTO. PARÁMETROS O ARGUMENTOS Y TIPOS. PASO POR VALOR. RETURN. EJEMPLOS. (CU01122E)

Variables. a 9 4. Ahora ya es posible realizar operaciones con los números introducidos por teclado y guardados en las variables a y b.

Transcripción:

APRENDERAPROGRAMAR.COM STRINGBUFFER, STRINGBUILDER JAVA. EJEMPLO. DIFERENCIAS ENTRE CLASES. CRITERIOS PARA ELEGIR. MÉTODOS. (CU00914C) Sección: Cursos Categoría: Lenguaje de programación Java nivel avanzado I Fecha revisión: 2039 Resumen: Entrega nº 14 curso Lenguaje de programación Java Nivel Avanzado I. Autor: José Luis Cuenca

STRINGBUFFER Y STRINGBUILDER Java provee distintas clases para el trabajo con cadenas de texto. La más básica, la clase String. Sin embargo existen otras clases como StringBuffer y que resultan de interés porque facilitan cierto tipo de trabajos y aportan mayor eficiencia en determinados contextos. Vamos a estudiarlas. CLASE STRINGBUILDER La clase es similar a la clase String en el sentido de que sirve para almacenar cadenas de caracteres. No obstante, presenta algunas diferencias relevantes. Señalaremos como características de a tener en cuenta: - Su tamaño y contenido pueden modificarse. Los objetos de éste tipo son mutables. Esto es una diferencia con los String. - Debe crearse con alguno de sus costructores asociados. No se permite instanciar directamente a una cadena como sí permiten los String. - Un está indexado. Cada uno de sus caracteres tiene un índice: 0 para el primero,1 para el segundo, etc. - Los métodos de no están sincronizados. Esto implica que es más eficiente que StringBuffer siempre que no se requiera trabajar con múltiples hilos (threads), que es lo más habitual. Los constructores de se resumen en la siguiente tabla: Constructor Descripción Ejemplo () (int capacidad) (String str) Construye un vacío y con una capacidad por defecto de 16 carácteres. Se le pasa la capacidad (número de caracteres) como argumento. Construye un en base al String que se le pasa como argumento. s = new (); s = new (55); s = new ("hola");

Los métodos principales de se resumen en la siguiente tabla: Retorno Método Explicación append(...) Añade al final del a la que se aplica, un String o la representación en forma de String de un dato asociado a una variable primitiva int capacity() Devuelve la capacidad del int length() Devuelve el número de caracteres del reverse() Invierte el orden de los caracteres del void char setcharat(int indice,char ch) charat(int indice) Cambia el carácter indicado en el primer argumento por el carácter que se le pasa en el segundo Devuelve el carácter asociado a la posición que se le indica en el argumento void setlength(int nuevalongitud) Modifica la longitud. La nueva longitud no puede ser menor String tostring() Convierte un en un String insert(int indiceini,string cadena) delete(int indiceini,int indicefin) Añade la cadena del segundo argumento a partir de la posición indicada en el primero Borra la cadena de caracteres incluidos entre los dos indices indicados en los argumentos deletechar(int indice) Borra el carácter indicado en el índice replace(int indiceini, int indicefin,string str) Reemplaza los caracteres comprendidos entre los dos indices por la cadena que se le pasa en el argumento int indexof (String str) Analiza los caracteres de la cadena y encuentra el primer índice que coincide con el valor deseado String substring(int indicefin) indiceini,int Devuelve una cadena comprendida entre los dos índices El método append será probablemente el más utilizado cuando trabajemos con esta clase. CLASE STRINGBUFFER La clase StringBuffer es similar a la clase, siendo la principal diferencia que sus métodos están sincronizados, lo cual permite trabajar con múltiples hilos de ejecución (threads). Los constructores y métodos de StringBuffer son los mismos que los de.

DIFERENCIAS ENTRE STRING, STRINGBUILDER Y STRINGBUFFER Vamos a enumerar las principales diferencias entre estas tres clases: - StringBuffer y son mutables, mientras que String es inmutable. Cada vez que modificamos un String se crea un objeto nuevo. Esto no ocurre con StringBuffer y. - Los objetos String se almacenan en el Constant String Pool que es un repositorio o almacén de cadenas, de valores de Strings. Esto se hace con el fin de que si creamos otro String, con el mismo valor, no se cree un nuevo objeto sino que se use el mismo y se asigne una referencia al objeto ya creado. Los objetos StringBuffer y se almacenan en el heap que es otro espacio de memoria usado en tiempo de ejecución para almacenar las instancias de clases, objetos y arrays. Realmente no nos interesa entrar a nivel de detalle en estas diferencias: simplemente, recordar que los objetos String tienen diferente tratamiento que los StringBuffer y. - La implementación de la clase StringBuffer es synchronized (sincronizada) mientras no. - El operador de concatenación + es implementado internamente por Java usando. CRITERIOS PARA USAR STRING, STRINGBUILDER O STRINGBUFFER Cómo decidir qué clase usar? Normalmente usaremos la clase String. No obstante, en algunos casos puede ser de interés usar StringBuffer o. A continuación damos algunas indicaciones útiles para elegir: - Si el valor del objeto no va a cambiar o va a cambiar poco, entonces es mejor usar String, la clase más convencional para el trabajo con cadenas. - Si el valor del objeto puede cambiar gran número de veces y puede ser modificado por más de un hilo (thread) la mejor opción es StringBuffer porque es thread safe (sincronizado). Esto asegura que un hilo no puede modificar el StringBuffer que está siendo utilizado por otro hilo. - Si el valor del objeto puede cambiar gran número de veces y solo será modificado por un mismo hilo o thread (lo más habitual), entonces usamos, ya que al no ser sincronizado es más rápido y tiene mejor rendimiento. El propio api de Java recomienda usar con preferencia sobre StringBuffer, excepto si la situación requiere sincronización. En esencia la multitarea (trabajar con varios thread) nos permite ejecutar varios procesos a la vez en paralelo. Es decir, de forma concurrente y por tanto eso nos permite hacer programas que se ejecuten en menor tiempo y sean más eficientes. Esto ya lo veremos con más detalle más adelante. Vamos a ver un ejemplo en el que mediremos el rendimiento de y StringBuffer Para ello vamos a concatener un millón de String ("Elefante") a un y a un StringBuffer, y compararemos los tiempos. El código que ejecutaremos será el siguiente:

/* Curso java avanzado aprenderaprogramar.com*/ public class MidiendoStringBuffer {public static void main(string[] args) { StringBuffer sbuffer = new StringBuffer(); long inicio = System.currentTimeMillis(); for (int i=0; i<10000000; i++) { sbuffer.append("elefante"); long fin = System.currentTimeMillis(); System.out.println("Tiempo del StringBuffer: " + (fininicio)); /* Curso java avanzado aprenderaprogramar.com*/ public class Midiendo {public static void main(string[] args) { sbuilder = new (); long inicio = System.currentTimeMillis(); for (int i=0; i<10000000; i++) { sbuilder.append("elefante"); long fin = System.currentTimeMillis(); System.out.println("Tiempo del : " + (fininicio)); Los resultados que obtendremos pueden ser variables. Por qué? Porque el tiempo de ejecución depende de muchos factores, por ejemplo del computador que utilicemos, estado del procesador en el momento de la ejecución, etc. En general el resultado será que es más rápido para ejecutar esta tarea. Por ejemplo podemos obtener Tiempo del StringBuffer: 328 Tiempo del : 297 No obstante, podrías encontrarte con que en algunas ejecuciones el tiempo que te marca StringBuffer sea menor debido a lo que hemos indicado anteriormente: el tiempo de ejecución depende de muchos factores. No obstante, lo importante es quedarnos con la idea de que a no ser que sea realmente necesario, será preferible usar antes que String Buffer. Y si hicieramos ésto mismo con el operador de suma? La misma prueba con el operador de suma consumiría una gran cantidad de tiempo, ya que la creación constante de nuevos objetos hace que la JVM tenga que empezar a limpiar continuamente el Heap. A modo de referencia, concatener tan sólo 100.000 String con el operador de suma se puede demorar por ejemplo 100000 milisegundos frente a por ejemplo 90 milisegundos con, por lo que su rendimiento no tiene comparación para este tipo de procesos. CONCLUSIONES Para los usos más habituales usaremos String, la clase convencional prevista por Java para trabajar con cadenas. En situaciones especiales en que se requiera realizar muchas modificaciones de un String (por ejemplo ir concatenándole sucesivos fragmentos) la opción recomendada es usar. Recurriremos a StringBuffer sólo cuando trabajemos en entorno multihilos. Cabe preguntarse. Por qué existen distintas clases para realizar tareas tan parecidas? No sería preferible tener una sola clase y de alguna manera especificar cómo queremos que trabaje? La respuesta es que quizás. Los motivos por los que existen varias clases son:

- Motivos históricos. Han ido apareciendo nuevas clases a medida que Java evolucionaba. - Motivos de diseño del lenguaje y compilador Java. Los creadores de Java diseñan el lenguaje de la forma que les parece más adecuada. Casi siempre aciertan (y a veces se equivocan). EJERCICIO Realizar un programa que realice lo siguiente: a) Crear un con la cadena "Hola Caracola" y mostrarla por consola. b) Mostrar por consola su capacidad y longitud. c) Partiendo de la cadena anterior y usando los métodos de modificar la cadena para que pase a ser "Hay Caracolas" y mostrarla por consola. d) Partiendo de la cadena anterior y usando los métodos de modificar la cadena para que pase a ser "Hay 5000 Caracolas" y mostrarla por consola. El número entero 5000 debe estar almacenado en un int inicialmente. e) Partiendo de la cadena anterior y usando los métodos de modificar la cadena para que pase a ser "Hay 5000 Caracolas en el mar" y mostrarla por consola. f) Almacenar en un String los últimos 4 carácteres del resultante y mostrar ese String por consola. g) Mostrar por consola la capacidad y longitud del final. h) Realizar el mismo ejercicio con la clase StringBuffer. Ejemplo de ejecución: El es : Hola Caracola Capacidad inicial = 29 Longitud inicial = 13 Hay Caracolas Hay 5000 Caracolas Hay 5000 Caracolas en el mar mar Capacidad final = 29 Longitud final = 28 Para comprobar si tu solución es correcta puedes consultar en los foros aprenderaprogramar.com. Próxima entrega: CU00915C Acceso al curso completo en aprenderaprogramar.com -- > Cursos, o en la dirección siguiente: http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=58&itemid=180