Download Arreglos (arrays)
Document related concepts
no text concepts found
Transcript
Arreglos (arrays) Un arreglo es una estructura de datos homogénea o conjunto de elementos del mismo tipo. En Java se pueden manejar arreglos de elementos de tipo primitivo (8 tipos primitivos hay en Java) o arreglos de objetos. Los arreglos son variables con índice, y pueden ser unidimensionales, bidimensionales o n - dimensionales. Tradicionalmente las cadenas o strings suelen ser implementados en los lenguajes de programación como un tipo de dato o simplemente se manejan con apuntadores y arreglos de tipo char como el caso de C y C++. En Java se crearon dos clases para menejo de cadenas; la clase String y la StringBuffer. Como veremos, la clase primera clase maneja cadenas inmutables y la segunda es para cadenas mutables y sus métodos son muy utilizados en la programación con Java. 6.1 Declaración e inicialización de arrays Para crear un arreglo de cualquier tipo de elementos la sintaxis es: tipo-elemento[] nombre; nombre = new tipo-elemento[n]; // declara un arreglo // asigna almacenamiento // para los n elementos o también puede declararse y asignarse localidades de almacenamiento para los n elementos así: tipo-elemento[] nombre = new tipo-elemento[n]; Ejemplos: float[] x; // declara x como una referencia a un arreglo de floats x = new float[8]; // aloja un arreglo de 8 elementos //de tipo float, referenciados por x boolean[] banderas = new boolean[1024];// aloja un arreglo de 1024 elementos de // tipo boolean referenciados por banderas String[] nombres new String[32];// aloja un arreglo de 32 elementos spm objetos de // la clase String referenciados por nombres Point[] ideal = new Point[10][10];// aloja un arreglo de 100 elementos son objetos de // la clase Point referenciados por ideal, y es un // un arreglo bidemensional. La inicialización de arreglos es similar a como se hace en lenguaje C . Se ponen los valores entre llaves { } si se desean inicializar en tiempo de compilación, (de cualquier manera Java garantiza la inicialización con valores por omisión dependiendo del tipo ). También pueden inicializarse de la manera tradicional con asignación mediante el operador [], veamos el siguiente fragmento de código: //Aquí el compilador no sabe que tan grande es el array a1. int[] a1; //tienen el mismo int a1[]; //significado int[] a2; //Es posible inicializar arrays de esta forma int[] a1 = { 1, 2, 3, 4, 5 }; // inicialización // Es posible asignar un array a otro usando // los handles o referencias: a2 = a1; Creación de arreglos Cuando creamos arrays en Java, necesitamos utilizar el operador new , para reservar espacio en memoria para almacenar todos los elementos. Así , de esta manera se indica el número de elementos que tendrá en cada dimensión. se crean los arrays de la siguiente forma: identificador = new tipo [ tamaño ]; identificador = new tipo [ tamaño] ... [ tamaño ]; Es necesario indicar que el primer elemento de un array tiene un índice cero, y el último tiene un índice ( tamaño - 1 ). Cabe señalar que cuado creamos arrays de tipos primitivos y arrays de objetos difieren en cuanto al espacio de memoria en que se crean, por ejemplo en un array de primitivos : int[] a1 = { 1, 2, 3, 4, 5 }; // declaración e inicialización Abría sido equivalente que hiciéramos: int[] a1 = new int[5]; // declaración a1[0]= 1; // inicialización a1[1]= 2; a1[2]= 3; a1[3]= 4; a1[4]= 5 ; Tenemos el siguiente modelo de memoria cuando declaramos el arreglo a1 ver siguiente figura: Figura: Tras declarar el array a1 , se reserva espacio en la memoria stack para la referencia del array. Después de usar el operador new para colocar espacio, se reserva memora heap para el contenido del array. Los valores son inicializados automáticamente a 0, si no es que los inicializamos de forma explícita. Ver la figura del modelo de memoria cuando tras colocar el espacio int[] a1 = new int[5]. Por otra parte, para un array de objetos el espacio colocado es para contener una referencia al objeto, no el objeto en sí. Por ejemplo, veamos que al definir una clase Calendario que contenga el nombre del mes y un número de días. public class Calendario { String mes; int nodias; Calendario ( String mes, int nodias ) { this.mes = mes; this.nodias = nodias; } }// fin de la clase calendario Después de definir la clase , se puede crear un array de esos elementos: new Calendario[12]. El modelo de memoria tendrá el aspecto de la figura siguiente al asignar espacio Calendario c[] = new Calendario[12]. Se observará que aún no hay espacio reservado para objetos Calendario. Todo lo que hay en el array es una referencia null. Esto no sucede hasta que se reserva espacio mediante new Calendario(..) y se agregue el objeto a la matriz mediante c[ x ] = ... el modelo de memoria no será afectado. En la siguiente figura se muestra el modelo tras ejecutar las siguientes sentencias: c[ 0 ] = new Calendario("Enero", 31 ); c[ 1 ] = new Calendario("Febrero" , 28); Figura que muestra el array de objetos después de la asignación.