Tabla de contenido
Creación e inicialización de arreglos
Acceder a los elementos de una matriz
Las matrices son tipos de referencia.
Conozca la distribución de memoria de JVM
La diferencia entre las variables de tipo básico y las variables de tipo de referencia
Más sobre las variables de referencia
Paso de parámetro tipo de datos básico
Tipo de matriz de paso de parámetro (tipo de datos de referencia)
como el valor de retorno de la función
Ejercicio de edición de arreglos
Encuentre el promedio de los elementos en una matriz
Encuentra el elemento especificado en la matriz
Clasificación de matriz (burbuja)
for-each atraviesa una matriz binaria
En cuanto a la definición y uso de arreglos, el blogger también lo explicó en la etapa de lenguaje C. Si estás interesado, puedes ir al siguiente enlace para conocer más ¿Quieres saber sobre arreglos ? Entre y eche un vistazo_Blog de Spring Breeze-CSDN Blog https://blog.csdn.net/m0_71731682/article/details/130564827?spm=1001.2014.3001.5501
Conceptos básicos de arreglos
Por qué usar una matriz
Suponiendo que desea guardar los puntajes de la prueba javaSE de 5 estudiantes y generarlos, si no usa una matriz, escribirá el siguiente código
public class TestStudent{
public static void main(String[] args){
int score1 = 70;
int score2 = 80;
int score3 = 85;
int score4 = 60;
int score5 = 90;
System.out.println(score1);
System.out.println(score2);
System.out.println(score3);
System.out.println(score4);
System.out.println(score5);
}
}
No hay problema con el código anterior, pero lo malo es: si hay 20 estudiantes con calificaciones, ¿tengo que crear 20 variables? Si hay calificaciones de 100 estudiantes, no es necesario crear 100 variables. Observe atentamente las calificaciones de estos estudiantes y descubra que: todas las calificaciones son del mismo tipo , entonces, ¿hay un tipo en Java que pueda almacenar múltiples datos del mismo tipo?
Respuesta: Sí, esta es la matriz de la que estamos a punto de hablar
que es una matriz
Array: Puede considerarse como una colección de elementos del mismo tipo. Es un espacio continuo en la memoria. como un verdadero garaje
En java, una matriz que contiene 6 elementos de tipo entero es equivalente a los 6 espacios de estacionamiento conectados entre sí en la figura anterior, como se puede ver en la figura anterior:
1. Los elementos almacenados en la matriz son del mismo tipo.
2. Los espacios en la matriz están conectados entre sí.
3. Cada espacio tiene su propio número. De hecho, el número de la posición es 0, que es el subíndice de la matriz
Entonces, ¿cómo crear una matriz en el programa?
Creación e inicialización de arreglos
creación de matrices
T[] 数组名 = new T[N];
T: indica el tipo de elementos almacenados en el arreglo
T[]: indica el tipo del arreglo
N: indica la longitud del arreglo
Por ejemplo
int[] array1 = new int[10]; // 创建一个可以容纳10个int类型元素的数组
double[] array2 = new double[5]; // 创建一个可以容纳5个double类型元素的数组
String[] array3 = new double[3]; // 创建一个可以容纳3个字符串元素的数组
Inicialización de matriz
La inicialización de matriz se divide principalmente en inicialización dinámica e inicialización estática
inicialización dinámica
Al crear una matriz, especifique directamente la cantidad de elementos en la matriz
int[] array = new int[10];
inicialización estática
Al crear una matriz, la cantidad de elementos de datos no se especifica directamente, pero el contenido de datos específico se especifica directamente
formato gramatical
El primer tipo: T[] nombre de matriz = {datos1, datos2, datos3, ..., datosn},
el segundo tipo: T[] nombre de matriz = new T{datos1, datos2, datos3,..., datosn};Ambos son equivalentes
//第一种
int[] array1 = {0,1,2,3,4,5,6,7,8,9};
double[] array2 = {1.0, 2.0, 3.0, 4.0, 5.0};
String[] array3 = {"hell", "Java", "!!!"};
//第一种
int[] array1 = new int[]{0,1,2,3,4,5,6,7,8,9};
double[] array2 = new double[]{1.0, 2.0, 3.0, 4.0, 5.0};
String[] array3 = new String[]{"hell", "Java", "!!!"};
Precauciones
1. Aunque la inicialización estática no especifica la longitud de la matriz, el compilador determinará la longitud de la matriz según la cantidad de elementos en {} durante la compilación.
2. Durante la inicialización estática, el tipo de datos en {} debe ser consistente con el tipo de datos antes de [].
3. La inicialización estática se puede abreviar, omitiendo la nueva T[] detrás// 注意:虽然省去了new T[], 但是编译器编译代码时还是会还原 int[] array1 = {0,1,2,3,4,5,6,7,8,9}; double[] array2 = {1.0, 2.0, 3.0, 4.0, 5.0}; String[] array3 = {"hell", "Java", "!!!"};
4. Las matrices también se pueden crear de acuerdo con los siguientes números en lenguaje C, lo cual no se recomienda
/* 该种定义方式不太友好,容易造成数组的类型就是int的误解 []如果在类型之后,就表示数组类型,因此int[]结合在一块写意思更清晰 */ int arr[] = {1, 2, 3};
5. La inicialización estática y dinámica también se puede dividir en dos pasos, pero no se puede omitir el formato
int[] array1; array1 = new int[10]; int[] array2; array2 = new int[]{10, 20, 30}; // 注意省略格式不可以拆分, 否则编译失败 // int[] array3; // array3 = {1, 2, 3};
6. Si la matriz no se inicializa, los elementos de la matriz tienen sus valores predeterminados
Si el tipo de elemento de almacenamiento en la matriz es el tipo de clase base, el valor predeterminado es el valor predeterminado correspondiente al tipo de clase base, por ejemplo:
tipo valores predeterminados byte 0 corto 0 En t 0 largo 0 flotar 0.0f doble 0.0 carbonizarse /u0000 booleano FALSO Si el tipo de elemento de almacenamiento en la matriz es un tipo de referencia, el valor predeterminado es nulo
uso de arreglos
Acceder a los elementos de una matriz
Una matriz es un espacio continuo en la memoria. El número del espacio comienza desde 0 y aumenta secuencialmente. Este número se denomina subíndice de la matriz, y la matriz puede acceder a sus elementos en cualquier posición a través del subíndice .
Por ejemplo
int[]array = new int[]{10, 20, 30, 40, 50};
System.out.println(array[0]);
System.out.println(array[1]);
System.out.println(array[2]);
System.out.println(array[3]);
System.out.println(array[4]);
// 也可以通过[]对数组中的元素进行修改
array[0] = 100;
System.out.println(array[0]);
Precauciones
1. La matriz es un espacio de memoria continuo, por lo que admite el acceso aleatorio, es decir, para acceder rápidamente a los elementos en cualquier posición de la matriz a través del acceso de subíndice 2. El subíndice
comienza desde 0 y el rango entre [0, N) no no incluir N, N Es la cantidad de elementos y no puede exceder el límite; de lo contrario, se informará una excepción fuera de los límites del subíndiceint[] array = {1, 2, 3}; System.out.println(array[3]); // 数组中只有3个元素,下标一次为:0 1 2,array[3]下标越界 // 执行结果 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 100 at Test.main(Test.java:4)
Se lanza una java.lang.ArrayIndexOutOfBoundsException. Al usar una matriz, asegúrese de subíndice y tenga cuidado con los límites.
iterar sobre la matriz
El llamado "recorrido" se refiere a visitar todos los elementos de la matriz, y el acceso se refiere a realizar ciertas operaciones en los elementos de la matriz.
Por ejemplo: imprimir
int[]array = new int[]{10, 20, 30, 40, 50};
System.out.println(array[0]);
System.out.println(array[1]);
System.out.println(array[2]);
System.out.println(array[3]);
System.out.println(array[4]);
El código anterior puede servir para atravesar los elementos de la matriz, pero el problema es:
1. Si se agrega un elemento a la matriz, debe agregar una declaración de impresión
2. Si hay 100 elementos en la entrada, debe escribir 100 declaraciones de impresión
3. Si desea modificar la impresión para agregar 1 a cada elemento en la matriz, es muy problemático modificarlo.
Al observar el código, se puede encontrar que la operación en cada elemento de la matriz es la misma, por lo que puede usar un ciclo para imprimir
Al igual que el lenguaje C
int[]array = new int[]{10, 20, 30, 40, 50};
for(int i = 0; i < 5; i++){
System.out.println(array[i]);
}
Después de cambiar a un bucle, los tres defectos anteriores se pueden resolver para los problemas 2 y 3, pero el problema 1 no se puede resolver. ¿Puedo obtener la longitud de la matriz?
La respuesta es sí, nota: en la matriz puedes pasar
matriz objeto.longitud
para obtener la longitud de la matriz
Por ejemplo:
int[]array = new int[]{10, 20, 30, 40, 50};
for(int i = 0; i < array.length; i++){
System.out.println(array[i]);
}
Los arreglos también se pueden recorrer usando for-each
Por ejemplo
int[] array = {1, 2, 3};
for (int x : array) {
System.out.println(x);
}
for-each es otra forma de usar el ciclo for, puede completar más convenientemente el recorrido de la matriz, puede evitar condiciones de ciclo y declaraciones de actualización.
Las matrices son tipos de referencia.
Conozca la distribución de memoria de JVM
La memoria es un espacio de almacenamiento continuo, que se utiliza principalmente para almacenar datos cuando el programa se está ejecutando. Por ejemplo:
1. El código debe cargarse en la memoria cuando el programa se está ejecutando.
2. Los datos intermedios generados por el programa en ejecución deben almacenarse en la memoria.
3. Las constantes en el programa también deben guardarse
. 4. Algunos datos es posible que deba almacenarse durante mucho tiempo, y algunos datos se almacenarán después de que se ejecute el método para ser destruidos
Si los datos almacenados en la memoria se almacenan indiscriminadamente, será muy problemático para la gestión de la memoria. Por ejemplo:
Encontrar cosas en una casa ordenada definitivamente será más rápido que en una casa desordenada, porque una casa ordenada clasifica todo
Por lo tanto, la JVM también divide la memoria utilizada según diferentes funciones:
Contador de programa (registro de PC) : solo un pequeño espacio, guarde la dirección de la siguiente instrucción ejecutada
Pila de máquina virtual (pila JVM) : alguna información relacionada con las llamadas a métodos, cada método primero creará una pila cuando se ejecute Frame , la pila El marco contiene: tabla de variables locales, pila de operandos, enlace dinámico, dirección de retorno y otra información, todo lo cual está relacionado con la ejecución del método. Por ejemplo: variables locales. Cuando el método termina de ejecutarse, el marco de la pila se destruye, es decir, los datos guardados en el marco de la pila también se destruyen.
Pila de métodos nativos (Pila de métodos nativos) : La pila de métodos nativos es similar a la pila de la máquina virtual. Solo el contenido guardado es la variable local del método nativo . En algunas versiones de la implementación de JVM (como HotSpot), el método nativo pila y la máquina virtual La pila es un
montón (Heap): el área de memoria más grande administrada por la JVM.Los objetos creados usando new se almacenan en el montón (por ejemplo, el new anterior int[]{1, 2,3}) , y el montón está junto con el programa. Se crea cuando comienza a ejecutarse y se destruye cuando el programa sale. Mientras los datos en el montón todavía estén en uso, no se destruirán .
Área de método: se utiliza para almacenar datos como información de clase, constantes, variables estáticas, código compilado por el compilador instantáneo, etc. que han sido cargados por la máquina virtual. El código de bytes compilado por el método se almacena en esta área.
La diferencia entre las variables de tipo básico y las variables de tipo de referencia
Las variables creadas por tipos de datos básicos se denominan variables básicas y los valores correspondientes se almacenan directamente en el espacio de variables;
La variable creada por el tipo de datos de referencia generalmente se denomina la referencia del objeto y su espacio almacena la dirección del espacio donde se encuentra el objeto.
Por ejemplo
public static void func() {
int a = 10;
int b = 20;
int[] arr = new int[]{1,2,3};
}
En el código anterior, a, b y arr son todas variables dentro de la función, por lo que su espacio se asigna en el marco de pila correspondiente al método func.
a y b son variables del tipo integrado, por lo que lo que se almacena en su espacio es el valor inicializado para la variable.
matriz es una variable de referencia de tipo matriz, y el contenido almacenado en su interior puede entenderse simplemente como la primera dirección de la matriz en el espacio de almacenamiento dinámico.
Como se puede ver en la figura anterior, la variable de referencia no almacena directamente el objeto en sí, sino que se puede entender simplemente como el almacenamiento de la dirección de inicio del objeto en el espacio de almacenamiento dinámico. A través de esta dirección, la variable de referencia se puede utilizar para manipular el objeto . Es un poco similar a los punteros en lenguaje C, pero las referencias en Java son más simples que las operaciones con punteros.
Más sobre las variables de referencia
public static void func() {
int[] array1 = new int[3];
array1[0] = 10;
array1[1] = 20;
array1[2] = 30;
int[] array2 = new int[]{1,2,3,4,5};
array2[0] = 100;
array2[1] = 200;
array1 = array2;
array1[2] = 300;
array1[3] = 400;
array2[4] = 500;
for (int i = 0; i < array2.length; i++) {
System.out.println(array2[i]);
}
}
resultado de la operación
¿Por qué aparecen estos valores?
Por favor vea el diagrama
Crear matriz1 y matriz2
Pasos después de matriz1 = matriz2
reconocer nulo
Null significa "referencia nula" en Java , es decir, una referencia que no apunta a un objeto
Por ejemplo
int[] arr = null;
System.out.println(arr[0]);
// 执行结果
Exception in thread "main" java.lang.NullPointerException
at Test.main(Test.java:6)
El papel de null es similar a NULL (puntero nulo) en lenguaje C, lo que significa una ubicación de memoria no válida. Por lo tanto, no se pueden realizar operaciones de lectura o escritura en esta memoria. Una vez que intente leer o escribir, se lanzará una NullPointerException
Nota: en el lenguaje C, dijimos que el puntero nulo en realidad apunta a la dirección 0, y no hay acuerdo en java de que exista alguna relación entre nulo y la memoria en la dirección 0.
Aplicaciones de arreglos
guardar datos
Por ejemplo
public static void main(String[] args) {
int[] array = {1, 2, 3};
for(int i = 0; i < array.length; ++i){
System.out.println(array[i] + " ");
}
}
También podemos usar for-each para guardar aquí. El blogger no dará un ejemplo aquí. Para aquellos que no recuerdan, pueden mirar la matriz transversal mencionada anteriormente.
como parámetro de función
Paso de parámetro tipo de datos básico
public static void main(String[] args) {
int num = 0;
func(num);
System.out.println("num = " + num);
}
public static void func(int x) {
x = 10;
System.out.println("x = " + x);
}
// 执行结果
x = 10
num = 0
Se encuentra que modificar el valor del parámetro formal x en el método func no afecta el valor numérico del parámetro real.
Esto se debe a que num creará un espacio en la pila en el que se almacena 0, y cuando se llama al método func, se creará un nuevo espacio para x, y los dos no interferirán entre sí, como se muestra en la figura a continuación.
Tipo de matriz de paso de parámetro (tipo de datos de referencia)
Por ejemplo
public static void main(String[] args) {
int[] arr = {1, 2, 3};
func(arr);
System.out.println("arr[0] = " + arr[0]);
}
public static void func(int[] a) {
a[0] = 10;
System.out.println("a[0] = " + a[0]);
}
// 执行结果
a[0] = 10
arr[0] = 10
Se encuentra que el contenido de la matriz se modifica dentro del método func, y el contenido de la matriz fuera del método también cambia.
Debido a que la matriz es un tipo de referencia, pasarla de acuerdo con el tipo de referencia puede modificar el contenido almacenado en ella.
Nota: si la matriz pasada tiene un objeto nuevo, el cambio en el parámetro formal no afectará el parámetro real en este momento.
Resumir
La llamada "referencia" es esencialmente solo almacenar una dirección. Java establece la matriz como un tipo de referencia, de modo que el paso de parámetro de matriz subsiguiente en realidad solo pasa la dirección de la matriz al parámetro de función. Esto puede evitar la Copia completa de la matriz (la matriz puede ser más larga, por lo que la sobrecarga de copia será muy grande)
como el valor de retorno de la función
Por ejemplo: Obtenga los primeros N elementos de la secuencia de Fibonacci
public class TestArray {
public static int[] fib(int n){
if(n <= 0){
return null;
}
int[] array = new int[n];
array[0] = array[1] = 1;
for(int i = 2; i < n; ++i){
array[i] = array[i-1] + array[i-2];
}
return array;
}
public static void main(String[] args) {
int[] array = fib(10);
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
}
diagrama
ejercicios de matriz
matriz a cadena
ejemplo de código
import java.util.Arrays
int[] arr = {1,2,3,4,5,6};
String newArr = Arrays.toString(arr);
System.out.println(newArr);
// 执行结果
[1, 2, 3, 4, 5, 6]
Es más conveniente usar este método para imprimir la matriz más tarde.
El paquete java.util.Arrays se proporciona en Java, que contiene algunos métodos comunes para manipular matrices.
copia de matriz
import java.util.Arrays;
public class Array {
public static void main(String[] args) {
func();
}
public static void func(){
// newArr和arr引用的是同一个数组
// 因此newArr修改空间中内容之后,arr也可以看到修改的结果
int[] arr = {1,2,3,4,5,6};
int[] newArr = arr;
newArr[0] = 10;
System.out.println("newArr: " + Arrays.toString(arr));
// 使用Arrays中copyOf方法完成数组的拷贝:
// copyOf方法在进行数组拷贝时,创建了一个新的数组
// arr和newArr引用的不是同一个数组
arr[0] = 1;
newArr = Arrays.copyOf(arr, arr.length);
System.out.println("newArr: " + Arrays.toString(newArr));
// 因为arr修改其引用数组中内容时,对newArr没有任何影响
arr[0] = 10;
System.out.println("arr: " + Arrays.toString(arr));
System.out.println("newArr: " + Arrays.toString(newArr));
// 拷贝某个范围.
int[] newArr2 = Arrays.copyOfRange(arr, 2, 4);
System.out.println("newArr2: " + Arrays.toString(newArr2));
}
}
En este punto, newArr y arr se refieren a la misma matriz, modifique newarr, arr cambiará, esta es una copia superficial
En este momento, use el método copyOf en Arrays para completar la copia de la matriz. El método copyOf crea una nueva matriz al copiar la matriz. Las referencias arr y newArr no son la misma matriz.
El código anterior implica algunos métodos
Arrays.copyOf se usa para copiar matrices
Arrays.copyOfRange se puede usar para copiar un rango de matrices
Arrays.toString convierte una matriz en una cadena
Nota : Cuando el tipo básico de datos se almacena en la matriz, no importa cómo lo copie, no habrá problemas. Sin embargo, si el almacenamiento es un tipo de datos de referencia, debe considerar el problema de la copia profunda y superficial cuando Más adelante le presentaré en detalle acerca de la copia profunda y superficial.
Encuentre el promedio de los elementos en una matriz
Dada una matriz de números enteros, encuentre el promedio
public class Avage {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6};
System.out.println(avg(arr));
}
public static double avg(int[] arr) {
int sum = 0;
for (int x : arr) {
sum += x;
}
return (double)sum / (double)arr.length;
}
}
Los resultados muestran
Encuentra el elemento especificado en la matriz
búsqueda secuencial
Dada una matriz y dado un elemento, encuentre la posición del elemento en la matriz
ejemplo
public static void main(String[] args) {
int[] arr = {1,2,3,10,5,6};
System.out.println(find(arr, 10));
}
public static int find(int[] arr, int data) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == data) {
return i;
}
}
return -1; // 表示没有找到
}
búsqueda binaria
Para arreglos ordenados , se puede usar una búsqueda binaria más eficiente
Matriz ordenada
El orden se divide en "orden ascendente" y "orden descendente"
, como 1 2 3 4, el orden creciente es el orden ascendente.
Por ejemplo, 4 3 2 1, el orden descendente es el orden descendente
Tomando una matriz ascendente como ejemplo, la idea de la búsqueda binaria es tomar primero el elemento en la posición media y luego usar el elemento que se encuentra para compararlo con el elemento central de la matriz.
Si son iguales, se encuentra el subíndice del elemento en el arreglo.
Si es menor que, busca en la mitad izquierda del arreglo de manera similar.
Si es mayor, busca en la mitad derecha del arreglo de manera similar. .
El código se implementa de la siguiente manera
public class Main {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6};
System.out.println(binarySearch(arr, 6));
}
public static int binarySearch(int[] arr, int toFind) {
int left = 0;
int right = arr.length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (toFind < arr[mid]) {
// 去左侧区间找
right = mid - 1;
} else if (toFind > arr[mid]) {
// 去右侧区间找
left = mid + 1;
} else {
// 相等, 说明找到了
return mid;
}
}
// 循环结束, 说明没找到
return -1;
}
}
Se puede ver que para una búsqueda de matriz con una longitud de 10,000 elementos, la búsqueda binaria solo necesita repetirse 14 veces para completar la búsqueda. A medida que aumenta el número de elementos de la matriz, la ventaja de la búsqueda binaria se vuelve mayor.
Nota: solo para arreglos ordenados
Clasificación de matriz (burbuja)
Dada una matriz, ordenar la matriz en orden ascendente (descendente)
Los bloggers de clasificación de burbujas han hablado sobre todo el proceso en lenguaje C, por lo que no entraré en detalles aquí.
Ideas de algoritmos
Asumiendo orden ascendente:
1. Compare los elementos adyacentes en la matriz de adelante hacia atrás. Si el elemento anterior es más grande que el siguiente, cámbielos. Después de un viaje, el elemento más grande está al final
de la matriz
. 2. Siga el proceso anterior en gire hasta el final de la matriz Todos los elementos están alineados
ejemplo de código
import java.util.Arrays;
public class Main{
public static void main(String[] args) {
int[] arr = {9, 5, 2, 7};
bubbleSort(arr);
System.out.println(Arrays.toString(arr));
}
public static void bubbleSort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = 1; j < arr.length-i; j++) {
if (arr[j-1] > arr[j]) {
int tmp = arr[j - 1];
arr[j - 1] = arr[j];
arr[j] = tmp;
}
}
} // end for
} // end bubbleSort
}
La clasificación de burbujas es menos eficiente Hay algoritmos de clasificación más eficientes integrados en Java
Usar de la siguiente manera
public static void main(String[] args) {
int[] arr = {9, 5, 2, 7};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
}
Orden inverso de la matriz
Dada una matriz, ordenar los elementos en orden inverso
tren de pensamiento
Establezca dos subíndices, apuntando al primer elemento y al último elemento respectivamente. Intercambie los elementos en las dos posiciones.
Luego deje que el subíndice anterior aumente y el último subíndice disminuya, y el ciclo continúa.
ejemplo de código
import java.util.Arrays;
public class Main{
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4};
reverse(arr);
System.out.println(Arrays.toString(arr));
}
public static void reverse(int[] arr) {
int left = 0;
int right = arr.length - 1;
while (left < right) {
int tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
}
}
Matriz bidimensional
Una matriz bidimensional es esencialmente una matriz unidimensional, excepto que cada elemento es una matriz unidimensional.
gramática básica
tipo de datos[][] nombre de matriz = nuevo tipo de datos[número de fila][número de columna] {inicializar datos};
nt[][] arr = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
for (int row = 0; row < arr.length; row++) {
for (int col = 0; col < arr[row].length; col++) {
System.out.printf("%d\t", arr[row][col]);
}
System.out.println("");
}
// 执行结果
1 2 3 4
5 6 7 8
9 10 11 12
Nota: En el código anterior, encontraremos que usamos el método de longitud cuando accedemos y recorremos la matriz. El primer uso es
arr.longitud
Aquí está la cantidad de elementos contenidos en la matriz bidimensional (matriz unidimensional), es decir, la cantidad de matrices unidimensionales, el segundo uso es
flecha[fila].longitud
Aquí está el número de elementos contenidos en una matriz unidimensional. Desde aquí también podemos ver que una matriz bidimensional es esencialmente una matriz unidimensional, pero cada elemento es una matriz unidimensional.
No hay una diferencia obvia entre el uso de matrices bidimensionales y matrices unidimensionales, por lo que el blogger no explicará demasiado aquí, y solo hablará sobre algunas diferencias aquí.
for-each atraviesa una matriz binaria
Todavía se necesitan dos capas de bucles aquí. El tipo de elemento de la primera capa de bucle es una matriz unidimensional, por lo que es de tipo int [], y el tipo de elementos en la segunda capa de la matriz unidimensional de bucle es tipo int, por lo que es de tipo int
for (int[] ret : array) {
for (int x : ret) {
System.out.print(x+" ");
}
System.out.println();
}
Método Arrays.deepToString
El método Arrays.deepToString se usa de la misma manera que el método Arrays.toString
Arrays.deepToString convierte una matriz bidimensional en una cadena
Arrays.deepToString(array)
matriz binaria irregular
Hay arreglos irregulares de dos dígitos en java ¿Qué es un arreglo irregular?
Es decir, la cantidad de elementos en cada fila no es igual, lo que explica perfectamente que una matriz bidimensional es esencialmente una matriz unidimensional, y la cantidad de elementos en una matriz unidimensional no necesita ser igual.
Por ejemplo
int[][] array = new int[2][];
array[0] = new int[]{11,22,33,44};
array[1] = new int[]{111,221,331,441,999,888,777};
Nota: en java, al crear una matriz de dos dígitos, la columna se puede omitir, pero la fila no se puede omitir
Resumir
Este es el final de la explicación de "Una explicación detallada de la recursividad y la Torre de Hanoi". Le invitamos a dejar un mensaje para intercambiar, criticar y corregir. Si el artículo es útil para usted o cree que la escritura del autor no lo es malo, puede hacer clic para seguir, dar me gusta y marcar como favorito para obtener ayuda.