1. Arrays en memoria

En los ejemplos anteriores, las ilustraciones eran un poco inexactas.

Al crear matrices (como cuando se crean cadenas), se asignan dos bloques de memoria separados: uno para almacenar la matriz (contenedor) en sí y un segundo bloque para la variable que almacena su dirección . La siguiente imagen representa esta aclaración:

arreglos en memoria

La memoria asignada para la matriz de 10 intelementos y la int[]variable que almacena la dirección de la intmatriz, se muestra en verde.

intA modo de comparación, una variable ordinaria que almacena el valor 199se muestra en azul.

Esto recuerda un poco a almacenar cadenas en la memoria, ¿no crees?

Así es, cuerdas. Y al igual que cuando trabaja con cadenas, puede asignar variables de matriz entre sí:

Código Explicación
int[] a = new int[10];
a[2] = 4;
a[7] = 9;
int[] b = a;

a[9] = b[2] + a[7];
Crear una matriz de 10 intelementos.
Asigne el valor 4a la celda con índice 2.
Asigne el valor 9a la celda con índice 7.
En la bvariable, guarde la dirección almacenada en la avariable.
Ahora ay bapunte al mismo objeto de matriz en la memoria.
En la celda del objeto de matriz con índice 9, escriba la suma de los valores que se almacenan en las celdas 2(que almacena el valor 4) y 7(que almacena el valor 9).

El objeto de matriz permanece justo donde estaba, y las variables ay balmacenan la misma dirección (referencia) al mismo objeto. Mira la imagen:

Arreglos en la memoria 2

2. Más detalles sobre cómo trabajar con arreglos

Puede crear una matriz de elementos de absolutamente cualquier tipo. Para hacer esto, simplemente escriba corchetes después del nombre del tipo. En general, la creación de una matriz se ve así:

type[] name = new type[number];

Donde tipo es el tipo de los elementos que almacenaremos en la matriz. Nombre es el nombre de la variable que usaremos para referirnos a la matriz, y número es el número de celdas en la matriz.

El ejemplo anterior es la forma canónica para crear una variable de matriz y un objeto de matriz. En realidad, estas son dos entidades separadas.

Puede crear una variable de matriz por separado de un objeto de matriz:

type[] name;
name = new type[number];

Y un punto más que no es menor:

Puede utilizar variables o incluso expresiones completas como matriz de índice y número de elementos de la matriz .

Ejemplos:

Código Explicación
int n = 100;
int[] a = new int[n];
Crear una matriz de nelementos.
int n = 100;
int[] a = new int[n * 2 + 3];
Crear una matriz con 203elementos
int n = 100;
int[] a = new int[n];
a[n-1] = 2;
a[n-2] = 3;
a[n/5] = a[n-1] + a[n-2]


// a[99] = 2;
// a[98] = 3;
// a[20] = a[99] + a[98];
Importante:
Por cierto, debe tener en cuenta que si intenta acceder a una celda de matriz utilizando un índice que no existe para la matriz (en nuestro ejemplo, eso significa cualquier número entero que no esté en el rango), el programa se bloqueará con 0..99un ArrayIndexOfBoundException, lo que significa que el índice estaba fuera de los límites de la matriz.

3. Longitud de la matriz

Como vio en el ejemplo anterior, puede crear una variable de matriz por sí misma y luego asignarle un valor (una referencia a un objeto de matriz) en algún lugar del código. Incluso puedes hacer esto:

Código Explicación
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
Cree una variable de matriz cuyo tipo sea int[]
Si la avariable es menor que 10,
cree una matriz de 10elementos.
De lo contrario,
cree una matriz de 20elementos.

Y ahora, ¿qué más puedes hacer con tal matriz? ¿Cómo sabes cuántos elementos hay en él?

Para ayudar con esto, los arreglos tienen una propiedad especial (variable) llamada length. Puedes encontrar la longitud de una matriz usando esta expresión:

array.length;

Aquí arrayestá el nombre de la variable de matriz y lengthes el nombre de la propiedad de la matriz. El valor de la lengthpropiedad no se puede cambiar: la lengthpropiedad en sí se puede asignar a otras variables, pero no se le puede asignar nada (si intenta hacer esto, el programa simplemente no compilará).

Podemos continuar con el ejemplo anterior así:

Código Explicación
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
for (int i = 0; i < array.length; i++)
{
   System.out.println(array[i]);
}
Cree una variable de matriz cuyo tipo sea int[]
Si la avariable es menor que 10,
cree una matriz de 10elementos.
De lo contrario,
cree una matriz de 20elementos
Haga un bucle sobre todos los elementos de la matriz: de 0a longitudarray.length - 1

4. Resumen de hechos sobre arreglos en Java

Recapitulemos lo que sabemos sobre las matrices:

Hecho 1. Una matriz consta de muchas celdas.

Dato 2. Accedes a una celda específica usando su número (índice).

Hecho 3. Todas las células son del mismo tipo.

Hecho 4. El valor inicial de todas las celdas es 0 (si las celdas almacenan números), null(si las celdas almacenan referencias a objetos) o false(si las celdas almacenan booleanvalores). Aprenderá más sobre los valores predeterminados en este capítulo .

El hecho 5. String[] list es solo la declaración de una variable. Esto no crea el contenedor (objeto de matriz) en sí mismo. Para usar la variable, primero debe crear una matriz (contenedor) y asignarla a la variable. Vea el ejemplo a continuación.

Hecho 6. Cuando creamos un objeto de matriz (contenedor), debemos indicar qué tan grande es, es decir, cuántas celdas contiene. Esto se hace con una declaración como: new TypeName[n];

Hecho 7. La longitud de una matriz se puede encontrar usando la .lengthpropiedad.

Dato 8. Después de crear una matriz, no puede cambiar el tipo de sus elementos o la cantidad de elementos que almacena.

Código Explicación
String s;
String[] list;
ses null
listesnull
list = new String[10];
int n = list.length;
La listvariable almacena una referencia a un objeto: una matriz de cadenas que consta de 10elementos.
nes10
list = new String[0];

Ahora listse refiere a una matriz de 0elementos. La matriz existe, pero no puede almacenar ningún elemento.

list = null;
System.out.println(list[1]);
Se lanzará una excepción (error de programa), es decir, el programa fallará. listalmacena una referencia anull
list = new String[10];
System.out.println(list[10]);
Se generará una excepción de matriz fuera de los límites (error de programa).
Si listalmacena 10elementos/celdas, los índices válidos son: 0 1 2 3 4 5 6 7 8 910elementos.

3
Tarea
Módulo 1. Java Syntax,  nivel 9lección 0
Bloqueada
Separar conceptos
task0601