Java: matrices

Java proporciona una estructura de datos, la array, que almacena una colección secuencial de tamaño fijo de elementos del mismo tipo. Una matriz se usa para almacenar una colección de datos, pero a menudo es más útil pensar en una matriz como una colección de variables del mismo tipo.

En lugar de declarar variables individuales, como número0, número1, ... y número99, declaras una variable de matriz como números y usas números [0], números [1] y ..., números [99] para representar variables individuales.

Este tutorial presenta cómo declarar variables de matriz, crear matrices y procesar matrices utilizando variables indexadas.

Declaración de variables de matriz

Para usar una matriz en un programa, debe declarar una variable para hacer referencia a la matriz y debe especificar el tipo de matriz a la que la variable puede hacer referencia. Aquí está la sintaxis para declarar una variable de matriz:

Sintaxis

dataType[] arrayRefVar;   // preferred way.
or
dataType arrayRefVar[];  // works but not preferred way.

Note - el estilo dataType[] arrayRefVarse prefiere. El estilodataType arrayRefVar[] proviene del lenguaje C / C ++ y fue adoptado en Java para adaptarse a los programadores de C / C ++.

Ejemplo

Los siguientes fragmentos de código son ejemplos de esta sintaxis:

double[] myList;   // preferred way.
or
double myList[];   // works but not preferred way.

Crear matrices

Puede crear una matriz utilizando el operador new con la siguiente sintaxis:

Sintaxis

arrayRefVar = new dataType[arraySize];

La declaración anterior hace dos cosas:

  • Crea una matriz utilizando un nuevo tipo de datos [arraySize].

  • Asigna la referencia de la matriz recién creada a la variable arrayRefVar.

Declarar una variable de matriz, crear una matriz y asignar la referencia de la matriz a la variable se pueden combinar en una declaración, como se muestra a continuación:

dataType[] arrayRefVar = new dataType[arraySize];

Alternativamente, puede crear matrices de la siguiente manera:

dataType[] arrayRefVar = {value0, value1, ..., valuek};

Se accede a los elementos de la matriz a través del index. Los índices de matriz están basados ​​en 0; es decir, empiezan de 0 aarrayRefVar.length-1.

Ejemplo

La siguiente declaración declara una variable de matriz, myList, crea una matriz de 10 elementos de tipo doble y asigna su referencia a myList:

double[] myList = new double[10];

La siguiente imagen representa la matriz myList. Aquí, myList contiene diez valores dobles y los índices van de 0 a 9.

Procesamiento de matrices

Al procesar elementos de matriz, a menudo usamos for bucle o foreach bucle porque todos los elementos de una matriz son del mismo tipo y se conoce el tamaño de la matriz.

Ejemplo

Aquí hay un ejemplo completo que muestra cómo crear, inicializar y procesar matrices:

public class TestArray {

   public static void main(String[] args) {
      double[] myList = {1.9, 2.9, 3.4, 3.5};

      // Print all the array elements
      for (int i = 0; i < myList.length; i++) {
         System.out.println(myList[i] + " ");
      }
     
      // Summing all elements
      double total = 0;
      for (int i = 0; i < myList.length; i++) {
         total += myList[i];
      }
      System.out.println("Total is " + total);
      
      // Finding the largest element
      double max = myList[0];
      for (int i = 1; i < myList.length; i++) {
         if (myList[i] > max) max = myList[i];
      }
      System.out.println("Max is " + max);  
   }
}

Esto producirá el siguiente resultado:

Salida

1.9
2.9
3.4
3.5
Total is 11.7
Max is 3.5

Los bucles foreach

JDK 1.5 introdujo un nuevo bucle for conocido como bucle foreach o bucle for mejorado, que le permite recorrer la matriz completa secuencialmente sin usar una variable de índice.

Ejemplo

El siguiente código muestra todos los elementos de la matriz myList -

public class TestArray {

   public static void main(String[] args) {
      double[] myList = {1.9, 2.9, 3.4, 3.5};

      // Print all the array elements
      for (double element: myList) {
         System.out.println(element);
      }
   }
}

Esto producirá el siguiente resultado:

Salida

1.9
2.9
3.4
3.5

Pasar matrices a métodos

Así como puede pasar valores de tipo primitivo a métodos, también puede pasar matrices a métodos. Por ejemplo, el siguiente método muestra los elementos en unint matriz -

Ejemplo

public static void printArray(int[] array) {
   for (int i = 0; i < array.length; i++) {
      System.out.print(array[i] + " ");
   }
}

Puede invocarlo pasando una matriz. Por ejemplo, la siguiente declaración invoca el método printArray para mostrar 3, 1, 2, 6, 4 y 2 -

Ejemplo

printArray(new int[]{3, 1, 2, 6, 4, 2});

Devolver una matriz de un método

Un método también puede devolver una matriz. Por ejemplo, el siguiente método devuelve una matriz que es la inversión de otra matriz:

Ejemplo

public static int[] reverse(int[] list) {
   int[] result = new int[list.length];

   for (int i = 0, j = result.length - 1; i < list.length; i++, j--) {
      result[j] = list[i];
   }
   return result;
}

La clase Arrays

La clase java.util.Arrays contiene varios métodos estáticos para ordenar y buscar matrices, comparar matrices y llenar elementos de matriz. Estos métodos están sobrecargados para todos los tipos primitivos.

No Señor. Método y descripción
1

public static int binarySearch(Object[] a, Object key)

Busca en la matriz especificada de Objeto (Byte, Int, doble, etc.) el valor especificado utilizando el algoritmo de búsqueda binaria. La matriz debe ordenarse antes de realizar esta llamada. Esto devuelve el índice de la clave de búsqueda, si está contenida en la lista; de lo contrario, devuelve (- (punto de inserción + 1)).

2

public static boolean equals(long[] a, long[] a2)

Devuelve verdadero si las dos matrices de longs especificadas son iguales entre sí. Dos matrices se consideran iguales si ambas contienen el mismo número de elementos y todos los pares de elementos correspondientes en las dos matrices son iguales. Esto devuelve verdadero si las dos matrices son iguales. El mismo método podría ser utilizado por todos los demás tipos de datos primitivos (Byte, short, Int, etc.)

3

public static void fill(int[] a, int val)

Asigna el valor int especificado a cada elemento de la matriz especificada de ints. El mismo método podría ser utilizado por todos los demás tipos de datos primitivos (Byte, short, Int, etc.)

4

public static void sort(Object[] a)

Ordena la matriz especificada de objetos en orden ascendente, de acuerdo con el orden natural de sus elementos. El mismo método podría ser utilizado por todos los demás tipos de datos primitivos (Byte, short, Int, etc.)