More Related Content
More from Whaleejaa Wha (20)
Arreglos
- 1. Representación de Datos y Aplicaciones
Representació
Tema 8
Arrays
Natividad Martínez Madrid
Martí
nati@it.uc3m.es
Objetivos del tema 8
● Ser capaz de diseñar, dimensionar y acceder de
forma adecuada a un array
● Aprender a utilizar de forma adecuada las
estructuras estáticas de datos en conjunción con
las estructuras de control de flujo de programa
Tema 8: Arrays
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 2
1
- 2. Contenido del tema 8
● Conceptos básicos de arrays
― Utilidad de las estructuras de almacenamiento masivo de datos
― Declaración de arrays
― Creación de arrays
― Inicialización de arrays
― Acceso y comprobaciones sobre arrays
― Copia de arrays
― Arrays multidimensionales
● Uso de arrays
― Cálculos aritméticos sobre matrices
― Algoritmos de búsqueda
― Algoritmos de ordenación
Tema 8: Arrays
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 3
Arrays
Definición:
● Un array es una secuencia de objetos o de datos
primitivos, todos del mismo tipo, unidos bajo un
identificador común
● Permiten agrupar información relacionada
● Son de tipo referencia
● Sinónimos:
― Tabla
― Matriz
Tema 8: Arrays
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 4
2
- 3. Arrays
● Cada objeto o dato del array está asignado a un posición
concreta del array, designada por un índice
Índice 1er elemento = 0 c[0] -7
c[1] 0
c[2] 3
c[3] 8
c[4] 5
Longitud del array = 10
c[5] -4
c[6] 6
c[7] 6
c[8] 1 Índice n-ésimo elemento = n - 1
Índice último elemento
= longitud - 1 c[9] 2
Índice: expresión entera: 0 <= índice <= longitud-1
Tema 8: Arrays
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 5
Declaración de arrays
● Se indica el tipo de los elementos contenidos por
el array, seguido por [] y seguido por el nombre
identificador del array
― los [] también pueden ir detrás del nombre
int[] enteros;
int enteros[]; Los elementos pueden ser
Punto[] puntos; de tipo primitivo o de
tipo referencia
Punto puntos[];
Tema 8: Arrays
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 6
3
- 4. Uso de la memoria en
declaración de arrays
Memoria de pila Memoria de heap
int[] enteros;
enteros null
Punto[] puntos; puntos null
class Punto {
int x;
int y;
Punto (int x, int y){
this.x = x;
this.y = y;
}
}
Tema 8: Arrays
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 7
Creación de arrays
● Usando new, seguido del nombre del tipo de los
elementos del array, seguido por el tamaño del
array (entre corchetes)
nombreArray = new tipo[tamaño];
enteros = new int[3];
puntos = new Punto[2];
Tema 8: Arrays
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 8
4
- 5. Creación de arrays
● El tamaño del array tiene que indicarse en el
momento de su creación, y no puede cambiarse
después
● Los elementos se inicializan a cero, false o
null en el momento de su creación
● Igual que sucede con el resto de objetos, se
puede declarar el array y crearlo en la misma
sentencia:
int[] enteros = new int[3];
Tema 8: Arrays
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 9
Creación de arrays
● Durante la creación del array
― Se reserva memoria para el atributo length
― Se reserva memoria para guardar la cantidad de
elementos indicada
― Se asigna la dirección de esa área de memoria a la
referencia del array
● Arrays de tipos primitivos
― Espacio para guardar los valores concretos, ya que el
tamaño de los tipos primitivos es conocido a priori
● Arrays de objetos
― Espacio para guardar las referencias a los objetos
Tema 8: Arrays
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 10
5
- 6. Uso de la memoria en
la creación de un array
Memoria de pila Memoria de heap
enteros = new int[3];
enteros
length 3
enteros[0] 0
enteros[1] 0
enteros[2] 0
puntos = new Punto[2]; puntos
length 2
puntos[0] null
puntos[1] null
¡Cuidado! No es
una llamada al
constructor
Tema 8: Arrays
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 11
Inicialización de arrays
● Según el tipo de los elementos:
― Variables de tipos primitivos:
enteros[0] = 7;
― Objetos de clases
puntos[0] = new Punto(1,2);
Tema 8: Arrays
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 12
6
- 7. Uso de la memoria en
la inicialización de un array
Memoria de pila Memoria de heap
enteros[0] = 7; enteros
length 3
enteros[0] 7
enteros[1] 0
enteros[2] 0
puntos[0] = new Punto(1,2); puntos
length 2
puntos[0]
puntos[1] null
x 1
y 2
Tema 8: Arrays
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 13
Ejemplo: Inicialización de arrays
public class Factorial {
private int[] fact;
public Factorial(int dimension) {
fact = new int[dimension];
fact[0] = 1;
for (int i = 1; i < fact.length; i++)
fact[i] = fact[i-1] * i;
}
[...]
}
Tema 8: Arrays
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 14
7
- 8. Otra inicialización de arrays
● De manera explícita en el momento de su
declaración:
int[] arrayEntero = {1,2,3,4,5};
String[] diasSemana = {“lunes”, “martes”,
“miercoles”, “jueves”, “viernes”,
“sabado”,“domingo”};
Punto[] puntos = {new Punto(1,2), new Punto(3,4);
● Determina el tamaño del array
● Sólo en el momento de la declaración
Tema 8: Arrays
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 15
Acceso a los arrays
Dos formas de acceder a su información:
1. Consulta de su longitud
● Atributo de tipo entero positivo (de sólo lectura)
length que proporciona el tamaño del array
nombreArray.length
2. Indexación
● Acceso a los elementos del array a través de su
índice
● El índice siempre tiene un rango entre 0 y N-1 siendo
N el tamaño del array
nombreArray[i]
Tema 8: Arrays
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 16
8
- 9. Ejemplo: Acceso arrays
● Crea un array con los enteros del 1 al argumento
introducido, e imprime la suma de los elementos
public class Serie {
public static void main (String[] args){
int tamanyo = Integer.parseInt(args[0]);
int[] a1 = new int[tamanyo];
int suma = 0;
for (int i = 0; i < a1.length; i++) {
a1[i] = i + 1;
suma += a1[i];
}
System.out.println("La suma es: " + suma);
}
}
Tema 8: Arrays
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 17
Ejemplo: Acceso arrays
public class Serie2 {
private int[] a1;
private int suma;
public Serie2(int tamanyo){
a1 = new int[tamanyo];
suma = 0;
for (int i = 0; i < a1.length; i++) {
a1[i] = i + 1;
suma += a1[i];
}
}
public static void main (String[] args){
int tamanyo = Integer.parseInt(args[0]);
Serie2 rec = new Serie2(tamanyo);
System.out.println("La suma es: " + rec.suma);
}
}
Tema 8: Arrays
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 18
9
- 10. Copia de arrays
● La asignación del valor de una variable de
array a otra sólo copiará la referencia
Punto[] puntos2 = puntos;
Tema 8: Arrays
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 19
Uso de la memoria en
la inicialización de un array
Memoria de pila Memoria de heap
Punto[] puntos2 = puntos; puntos2
puntos
length 2
puntos[0]
puntos[1] null
x 1
y 2
Tema 8: Arrays
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 20
10
- 11. Ejemplo: Copia arrays
public class Arrays {
public static void main (String[] args){
int[] a1 = {1,2,3,4,5};
int[] a2;
a2 = a1;
for (int i = 0; i < a2.length; i++)
a2[i]++;
for (int i = 0; i < a1.length; i++)
System.out.println("a1[" + i + "] = "
+ a1[i]);
}
}
● ¿Qué imprime este programa?
Tema 8: Arrays
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 21
Copia de arrays
● Se puede utilizar un bucle:
public class EjemploCopia {
public static int[] copia (int[] x1){
int[] x2 = new int[x1.length];
for (int i = 0; i < x1.length; i++)
x2[i] = x1[i];
return x2;
}
public static void main (String[] args){
int[] a1 = {1,2,3,4,5};
int[] a2 = copia(a1);
for (int i = 0; i < a2.length; i++)
a2[i]++;
for (int i = 0; i < a1.length; i++)
System.out.println("a1[" + i + "] = " + a1[i]
+ "; a2[" + i + "] = " + a2[i]);
}
}
Tema 8: Arrays
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 22
11