Guia N°1 - Arreglos

6
Norman Salvador Aráuz López - Guía N° 1: Fundamentos sobre arreglos Programación II

description

Guia N°1 - Arreglos

Transcript of Guia N°1 - Arreglos

Gua N 1: Fundamentos sobre arreglos

Fundamentos de arreglosEn esta gua encontrar los fundamentos principales sobre la comprensin e implementacin de los arreglos. Los arreglos son un tipo de dato que puede ser entendido por cualquier lenguaje moderno de programacin, en esta oportunidad se abordar su implementacin en Java utilizando el IDE (Entorno de Desarrollo Integrado) libre Netbeans, el cual proporciona herramientas de creacin, modificacin, depuracin y ejecucin de programas en lenguaje Java.Concepto de arreglosUn arreglo (array en ingls) es un objeto contenedor con un nmero fijo de valores de un solo tipo. La longitud de este se establece cuando se crea. Despus de su creacin su longitud es fija, la siguiente ilustracin muestra en detalle cmo est conformado un arreglo.

Cada elemento de una matriz se llama elemento, y cada elemento se accede por su ndice numrico, como se muestra en la figura anterior. First index: Primer elemento indexadoElement at index 8: Elemento en la posicin 8Array length: Tamao o longitud del arreglo (10 en este ejemplo)

El siguiente programa ArrayDemo, crea una matriz de enteros, pone algunos valores de la matriz e imprime cada valor en salida estndar.

DeclaracinConsidere el siguiente fragmento de cdigo implementado en Java // Declara un arreglo de enteros int [] MiArreglo;Al igual que las declaraciones de las variables de otros tipos, una declaracin de matriz tiene dos componentes: el tipo de la matriz y el nombre de la matriz. Un tipo de arreglo se escribe como type [], donde type es el tipo de datos de los elementos contenidos; los soportes son smbolos especiales que indican que esta variable contiene una matriz. El tamao de la matriz no es parte de su tipo (por lo que los soportes estn vacas). El nombre de un array puede ser lo que quieras, siempre y cuando siga las reglas de las nomenclaturas convencionales. Al igual que con las variables de otros tipos, la declaracin en realidad no crea una matriz; simplemente le dice al compilador que esta variable contendr una matriz del tipo especificado.Del mismo modo, se puede declarar arrays de otros tipos, vase los siguientes ejemplos:byte [] MiArregloDeBytes;short [] MiArregloDeShorts;long [] MiArregloDeLongs;float [] MiArregloDeFloats;double [] MiArregloDeDoubles;boolean [] MiArregloDeBooleans;char [] MiArregloDeChars;String [] MiArregloDeStrings;

CreacinUna forma de crear una matriz es con el operador new. La siguiente sentencia en el programa ArrayDemo asigna una matriz con suficiente memoria para 10 elementos enteros y asigna la matriz al variable MiArreglo.// Crea una matriz de enterosMiArreglo = new int [10];Si esta declaracin se omite, entonces el compilador dar un error como el siguiente, y la compilacin falla:ArrayDemo.java:4: Variable MiArreglo no se ha inicializado.Las siguientes lneas asignan valores a cada elemento de la matriz: MiArreglo [0] = 100; // Inicializar primer elemento MiArreglo [1] = 200; // Inicializar segundo elemento MiArreglo [2] = 300; // Y as sucesivamente

InicializacinCada elemento de la matriz se accede por su ndice numrico:

System.out.println ("Elemento 1 en el ndice 0:" + MiArreglo [0]); System.out.println ("Elemento 2 en el ndice 1:" + MiArreglo [1]); System.out.println ("Elemento 3 en el ndice 2:" + MiArreglo [2]);

Alternativamente, puede utilizar la sintaxis de acceso directo para crear e inicializar una matriz: int [] MiArreglo = {100, 200, 300, 400, 500, 600, 700, 800, 900, 1000 };

Aqu la longitud de la matriz se determina por el nmero de valores proporcionados entre llaves y separados por comas.Tambin puede declarar una matriz de matrices (tambin conocido como una matriz multidimensional) mediante el uso de dos o ms conjuntos de corchetes, ejemplo: String[][] names.Cada elemento, por lo tanto, debe tener acceso a un nmero correspondiente de los valores del ndice.Acceso a los elementos de un arregloEn el lenguaje de programacin Java, una matriz multidimensional es una matriz cuyos componentes son a su vez matrices. Esto es a diferencia de las matrices en C o Fortran. Una consecuencia de esto es que las filas se les permiten variar en longitud, como se muestra en la siguiente programa MultiDimArrayDemo:

clase MultiDimArrayDemo { main (String [] args) {static void pblicos String [] [] nombres = { {"Seor", "seora", "Sra."}, {"Smith", "Jones"} }; // Sr. Smith System.out.println (nombres [0] [0] + nombres [1] [0]); // Sra. Jones System.out.println (nombres [0] [2] + nombres [1] [1]); } }

La salida de este programa es:

El Sr. Smith Sra. Jones

Por ltimo, puede utilizar el incorporado en length propiedad para determinar el tamao de cualquier matriz. El siguiente cdigo imprime el tamao de la matriz a la salida estndar:

System.out.println (MiArreglo.length);

Copia de un ArregloSystem clase tiene un mtodo arraycopy que puede utilizar para copiar de manera eficiente los datos de un array en otra:public static arraycopy void (src object, int srcPos, Dest object, int destPos, int longitud)Los dos argumentos Object especifican la matriz a copiar de la matriz y la copia. Los tres int argumentos especifican la posicin de partida en la matriz de origen, la posicin de partida en la matriz de destino, y el nmero de elementos de matriz para copiar.El siguiente programa, ArrayCopyDemo, declara una matriz de char elementos, ortografa de la palabra "descafeinado". Utiliza la System.arraycopy mtodo para copiar una subsecuencia de componentes de la matriz en una segunda matriz: clase ArrayCopyDemo { main (String [] args) {static void pblicos char [] copyFrom = {'d', 'e', 'c', 'a', 'f', 'f', 'e', 'I', 'n', 'a', 't', 'e', 'd'}; char [] copyTo = new char [7]; System.arraycopy (copyFrom, 2, copyTo, 0, 7); System.out.println (new String (copyTo)); } }La salida de este programa es:cafenaManipulacin de un arregloLas matrices son un concepto potente y til que se usa en la programacin. Java proporciona mtodos para llevar a cabo alguno de las manipulaciones ms comunes relacionados con las matrices. Por ejemplo, la ArrayCopyDemo ejemplo se utiliza el arraycopy mtodo de la System clase en lugar de iterar manualmente a travs de los elementos de la matriz de origen y la colocacin de cada uno de ellos en la matriz de destino. Esto se lleva a cabo detrs de las escenas, lo que permite al desarrollador utilizar una sola lnea de cdigo para llamar al mtodo.

Para su comodidad, Java SE ofrece varios mtodos para realizar manipulaciones de matriz (tareas comunes, como la copia, clasificacin y bsqueda arrays) en la clase java.util.Arrays. Por ejemplo, el ejemplo anterior puede ser modificado para utilizar el copyOfRange mtodo de la java.util.Arrays clase, como se puede ver en el ArrayCopyOfDemo ejemplo. La diferencia es que el uso de la copyOfRange mtodo no requiere que usted para crear la matriz de destino antes de llamar al mtodo, debido a que la matriz de destino es devuelto por el mtodo:

clase ArrayCopyOfDemo { main (String [] args) {static void pblicos char [] copyFrom = {'d', 'e', 'c', 'a', 'f', 'f', 'e', 'I', 'n', 'a', 't', 'e', 'd'}; char [] = copyTo java.util.Arrays.copyOfRange (copyFrom, 2, 9); System.out.println (new String (copyTo)); } }Como puede ver, la salida de este programa es el mismo (caffein), aunque requiere un menor nmero de lneas de cdigo. Tenga en cuenta que el segundo parmetro de la copyOfRange mtodo es el ndice inicial del rango a copiar, inclusive, mientras que el tercer parmetro es el ndice final del rango a copiar, exclusivamente. En este ejemplo, el rango que va a copiar no incluye el elemento de la matriz en el ndice 9 (que contiene el carcter a ).Algunas otras operaciones tiles proporcionadas por mtodos en el java.util.Arrays clase, son los siguientes: Bsqueda de una matriz para un valor especfico para obtener el ndice en el que se coloca (la binarySearch mtodo). La comparacin de dos matrices para determinar si son iguales o no (el equals mtodo). Llenar una matriz para colocar un valor especfico en cada ndice (el fill mtodo). Ordenacin de un conjunto en orden ascendente. Esto se puede hacer ya sea secuencialmente, utilizando el sort mtodo, o al mismo tiempo, utilizando el parallelSort mtodo introducido en Java SE 8. clasificacin en paralelo de matrices grandes en sistemas multiprocesador es ms rpido que el conjunto secuencial de clasificacin.