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.